#include <sys/types.h>
//Line 2: typedef unsigned int uint;
//Line 3: typedef unsigned int uint;
int main() {
uint a;
return 0;
}
上記の C コードを指定すると、uint が で定義されているため、正常にコンパイルされ<sys/types.h>
ます。標準化されていませんが、Sys V との互換性のために追加されており、コードにコメントされています。
上記のコードの 2 行目のコメントを外しても、コンパイルは成功します。私が理解しているように、1 つの型を再定義することは許可されていません。これは、2 行目と 3 行目のコメントを外すことで確認できます。これにより、1 つのコンパイル エラーが発生します。
uint が標準ライブラリまたはユーザーのコードで定義されていることをコンパイラが十分に認識できるのはなぜですか? gcc と clang の両方で一貫した動作が得られます。
編集: この場合、リンクはゲームの一部ではありません。エラーはコンパイルのみ、つまり (-c オプション) で再現されます。
混乱を避けるために行番号が追加されています。
編集:
上記のコードの 2 行目のコメントを外しても、コンパイルは成功します。私が理解しているように、1 つの型を再定義することは許可されていません。これは、2 行目と 3 行目のコメントを外すことで確認できます。これにより、1 つのコンパイル エラーが発生します。
なぜこれを書いたのかわかりません。どうやら、行 2 と行 3 のコメントを外しても、gcc のコンパイル エラーにはなりません。Clang は、デフォルトのコンパイル オプションがはるかに厳密であり、いくつかのパラメーターを渡すことで調整できるため、エラーを返します。
ここでは、複数の typedef が許可されているかどうかについて説明します。これは非常に複雑であることがわかります。とにかく、typedef の重複を避けるようにしてください。