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
およびの宣言はs
C89/ANSI モードではエラーを引き起こすのではないでしょうか?
ベストアンサー1
これは、C89 または ANSI 標準の一部ではないにもかかわらず、GCC が GNU 拡張機能として宣言することを許可しているためs
、正常にコンパイルされます。これらの標準に厳密に準拠したい場合は、フラグを渡す必要があります-pedantic
。
c
ブロックの先頭でのの宣言は{ }
C89 標準の一部です。ブロックは関数である必要はありません。