API の先頭に次のコードが書かれているのを見たことがあります。
typedef struct SYSTEM SYSTEM;
タイプSYSTEMは以前は未定義でした。これが何をするか知っている人はいますか?SYSTEMこの行の後、コンパイラは何を考えますか?
答えてくれてありがとう!私の質問は、システムがファイルで以前に定義されていなかったため、それが何であるかわかりません。たとえば、その行は単独でコンパイルされますが、struct SYSTEMどこにも定義されていません。
これは実際には C でのみ効果的で便利です。
C では と入力する必要がありますが、C++ では型の一部struct typeを省略してと書くだけで済みます。structtype
typedef struct type type構造体名の前にキーワードtypeを使用せずに C で使用できます。struct
一部の C プログラマーは、この悪い習慣を考慮して、struct type. それを世に出そうとしているだけです。
エラーが発生しない理由は、その行が、struct SYSTEM存在する場合と存在しない場合がある の前方宣言として機能するためです。すべてのtypedefことは、あなたが言うときX、あなたが意味することをコンパイラに伝えることですY。
SYSTEMを使用する代わりに、C で名前を使用できますstruct SYSTEM。は へのtypedefシノニムSYSTEMを 作成しstruct SYSTEMます。
asstruct SYSTEMが宣言されていない場合、宣言struct SYSTEMはこの宣言のように不完全な型としても宣言します: struct SYSTEM;。
その後、完全なオブジェクト型struct SYSTEMを別の翻訳単位で宣言できます。