3

次の C プログラムを検討してください。

int main()
{
    puts("Hello world!");
    return 0;
}

これは正常にコンパイルおよび実行され、私の理解する限り、正当な C89 です。ただし、それについて 100% 確信があるわけではありません。C99 モードで clang を使用してコンパイルすると、そのことがわかりますimplicit declaration of function 'puts' is invalid in C99(C 標準が C99 で暗黙の関数宣言を違法にするように変更されたに違いないと思います。これを確認しようとしています)。

C89では暗黙の関数宣言は合法ですか? (それを行うのが悪い考えであっても(難読化されたCコードの挑戦でない限り))

4

2 に答える 2

8

C89では暗黙の関数宣言は合法ですか?

はい。セクション 3.3.2.2から:

関数呼び出しで括弧で囲まれた引数リストの前にある式が識別子のみで構成され、この識別子の宣言が表示されない場合、識別子は、関数呼び出しを含む最も内側のブロックで宣言されているかのように暗黙的に宣言されます。

    extern int  identifier();

現れた。

于 2013-07-07T01:35:43.303 に答える