0

次のような行があります。

static STAILQ_HEAD(, my_struct) _myqueue;

これまで QUEUE マクロを使用する理由はありませんでした。この呼び出しが行われる時点で「my_struct」を宣言する必要がありますか?

後でコードで my_struct を使用しようとすると、不完全なタイプのメッセージへの参照ポインターが取得されるため、私は尋ねているだけです。私は実際にここで他の誰かのコードを編集していますが、 my_struct がどこにも定義されていません

4

1 に答える 1

1

いいえ、my_struct を事前に宣言する必要はありません。

構造体の内容を指定せずに宣言で不明な構造体名に言及すると、不完全な型になります。コンパイラーに、その名前の構造体が存在することを伝えるだけですが、その中に何が含まれているかはまだわかりません。

コンパイラはそのサイズや内容を知る必要がないため、不完全な型へのポインターを宣言できます (これは STAILQ_HEAD マクロで発生します)。ただし、完全な構造を実際に宣言する前に、不完全な型をインスタンス化したり、不完全な型へのポインターを逆参照したりすることはできません。

于 2012-07-12T16:50:26.340 に答える