以下の2つの方法で構造体を構築しました(図A &図B)。私の.cファイルでは、私はそのような構造体にアクセスします(図C)。Cの構造体定義のバリエーション
なぜ、図Aが図Cによってアクセスされたときに図Aがコンパイラエラーを起こすのか説明してください。また、図Cを使用してアクセスすると図Bがコンパイラエラーを引き起こさないのはなぜですか?図
構造体が内部で使用されている場合、名前は構造体の上部と下部の2つの場所にある必要があります。
コンパイラの「前方参照」に関連していますか?良い説明をいただければ幸いです。スニペットAにおいて
//Fig. A
typedef struct
{
uint32_t* block_address;
struct mem_table_entry_t* next_entry_ptr;
}mem_table_entry_t;
typedef struct
{
mem_table_entry_t two_kib[8];
}mem_table_t;
と
//Fig. B
typedef struct mem_table_entry_t
{
uint32_t* block_address;
struct mem_table_entry_t* next_entry_ptr;
}mem_table_entry_t;
typedef struct
{
mem_table_entry_t two_kib[8];
}mem_table_t;
...
//Fig. C
memory_table.two_kib[block].next_entry_ptr = &memory_table.two_kib[block+1];
スニペットBがコンパイルされていますか? –
コンパイラのエラーを教えてください! –
私は、コンパイラが 'typedef struct T1 {...} T2;' T1とT2が 'T0 'に置き換えられても、構造体T1とT2が同じではないと感じていると考えます。 。 – alk