私は誰かのコードを解読しようとしていますが、わかりません。メンバーがヘッダーやコードの冒頭に定義されていないが、後で定義されるときに、構造がどのように適用されるかについての参照はありません。ここでは、私が把握しようとしているものの例を示します。私はData_t *データに注意しました。私たちがファンキーな関数を入力し、この行にコンパイラのエラーが出るまで、ヘッダの中には定義されていません。私は私の質問は - これは構造にデータを入力するための有効な方法だろうと思いますか?構造体のメンバーを定義せずに構造体を初期化する - C
多くの感謝!
#include <stdio.h>
typedef struct config{
int a;
int b;
int c;
Data_t *data;
} config_t;
int funky(config_t *config);
int main(void)
{
printf("In main()\n");
config_t config;
funky(&config);
printf("a = %d\n", config.a); //accessing config's a member
return 0;
}
int funky(config_t *config)
{
printf("In funky()\n");
Data_t *dataa = config->data;
for(i=0;i<5;i++){
dataa[i].mem1=i;
dataa[i].mem2=4+i;
}
//Set values
config->a = 1;
printf("a = %d\n", config->a); //pointer to config's a member
return 0;
}
こんにちはCarlさん、迅速な対応をありがとう。ですから、mainのconfig構造体のデータフィールドを初期化すれば、それは正常でしょうか?私が参照しているコードでは、main()コードでは、config.data = calloc(NUM、sizeof(Data_t))のようなコードを実行しています。コンパイラが実際に定義されていないときのData_tのサイズを知る方法はわかりません。 (?? O_O ??)ありがとう.. –
それはあなたを解決するはずです、はい。 'Data_t'が定義されていないためにコンパイラエラーを修正することはできませんが、それをクリアしていると仮定すると、そのポインタを初期化することも重要です。 –
Data_tの定義についてどう思いますか?あなたがData_tを定義すると、私はそれを見る方法です。つまりtypedef struct dataS {int mem1; int mem2; } Data_tヘッダーまたはメインの場合、Data_t * dataa = config-> dataを実行する必要はありません。ファンキーな機能で。それは以前の疑問の1つに戻る - メンバーを作る必要があるときに、関数内の構造のメンバーを定義することは可能ですか? –