2

API の先頭に次のコードが書かれているのを見たことがあります。

typedef struct SYSTEM SYSTEM;

タイプSYSTEMは以前は未定義でした。これが何をするか知っている人はいますか?SYSTEMこの行の後、コンパイラは何を考えますか?

答えてくれてありがとう!私の質問は、システムがファイルで以前に定義されていなかったため、それが何であるかわかりません。たとえば、その行は単独でコンパイルされますが、struct SYSTEMどこにも定義されていません。

4

2 に答える 2

4

これは実際には C でのみ効果的で便利です。

C では と入力する必要がありますが、C++ では型の一部struct typeを省略してと書くだけで済みます。structtype

typedef struct type type構造体名の前にキーワードtypeを使用せずに C で使用できます。struct

一部の C プログラマーは、この悪い習慣を考慮して、struct type. それを世に出そうとしているだけです。


エラーが発生しない理由は、その行が、struct SYSTEM存在する場合と存在しない場合がある の前方宣言として機能するためです。すべてのtypedefことは、あなたが言うときX、あなたが意味することをコンパイラに伝えることですY

于 2013-07-07T20:02:40.030 に答える
3

SYSTEMを使用する代わりに、C で名前を使用できますstruct SYSTEM。は へのtypedefシノニムSYSTEMを 作成しstruct SYSTEMます。

asstruct SYSTEMが宣言されていない場合、宣言struct SYSTEMはこの宣言のように不完全な型としても宣言します: struct SYSTEM;

その後、完全なオブジェクト型struct SYSTEMを別の翻訳単位で宣言できます。

于 2013-07-07T20:02:01.180 に答える