C言語における変数宣言の配置 質問する

C言語における変数宣言の配置 質問する

C では、すべての変数は関数の先頭で宣言する必要があると長い間思っていました。C99 ではルールが C++ と同じであることは知っていますが、C89/ANSI C の変数宣言の配置ルールは何ですか?

次のコードは、gcc -std=c89およびを使用して正常にコンパイルされますgcc -ansi

#include <stdio.h>
int main() {
    int i;
    for (i = 0; i < 10; i++) {
        char c = (i % 95) + 32;
        printf("%i: %c\n", i, c);
        char *s;
        s = "some string";
        puts(s);
    }
    return 0;
}

cおよびの宣言はsC89/ANSI モードではエラーを引き起こすのではないでしょうか?

ベストアンサー1

これは、C89 または ANSI 標準の一部ではないにもかかわらず、GCC が GNU 拡張機能として宣言することを許可しているためs、正常にコンパイルされます。これらの標準に厳密に準拠したい場合は、フラグを渡す必要があります-pedantic

cブロックの先頭でのの宣言は{ }C89 標準の一部です。ブロックは関数である必要はありません。

おすすめ記事