12

次のコードを試しました:

File1.c:

int x;

File2.c:

extern char x;
main()
{
    x=10;
    ....
    ....
}

としてコンパイルされます

$gcc File1.c File2.c

エラーは発生しませんでしたが、エラーが発生することを期待していました。

4

1 に答える 1

18

では、タイプFile.cのコンパイラに約束します。すべての翻訳単位は個別にコンパイルされるため、コンパイラーはこれを検証する方法がなく、あなたの言葉を受け入れます。また、リンカーは型チェックを行いません。エラーなしでビルドされる無効なプログラムになってしまいます。xchar

これが、ヘッダー ファイルを使用する必要がある理由です。File1.cFile2.cの両方が同じヘッダーから のextern宣言を取得した場合x、コンパイル時にエラーが発生しますFile1.c(定義が宣言と一致しないため)。[帽子のヒント @SteveJessop]

于 2013-03-22T09:11:33.890 に答える