C言語の変数宣言

P18

takatoshi@sarge:~/projects/futuu_no_linux$ gcc -dumpversion
3.3.6

で、

takatoshi@sarge:~/projects/futuu_no_linux$ cat args.c
#include "stdio.h"

int
main( int argc, char *argv[] ) {
    printf("argc=%d?n", argc);
    for ( int i = 0; i < argc; ++i ) {
        printf("argv[%d]=%s?n", i, argv[i]);
    }
    return 0;
}

takatoshi@sarge:~/projects/futuu_no_linux$ gcc -o args args.c
args.c: 関数 `main' 内:
args.c:6: error: `for' loop initial declaration used outside C99 mode

あー、C言語はfor文の中で変数宣言できないんだっけ。ブロックの先頭じゃなきゃダメなんだっけ。
でもヒマだったんで次のようにしてみた。

takatoshi@sarge:~/projects/futuu_no_linux$ cat args.c
#include "stdio.h"

int
main( int argc, char *argv[] ) {
    printf("argc=%d?n", argc);
    int i;
    for ( i = 0; i < argc; ++i ) {
        printf("argv[%d]=%s?n", i, argv[i]);
    }
    return 0;
}

takatoshi@sarge:~/projects/futuu_no_linux$ gcc -o args args.c
takatoshi@sarge:~/projects/futuu_no_linux$ ./args
argc=1
argv[0]=./args

なんかうまく行ってる。
ƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê C ‚̐V‹@”\
によると、

今回の新しい C 言語では、C++ 言語と同じように、ブロックの先頭という位置に縛られることなく、参照する前にどこでも宣言してよいということになりました。

とあって、あー、なるほどねと納得しそうになった矢先、

さらに、for 文も拡張されました。for 文は、for( [1]; ...; ...) { ... } のように通常用いますが、なんと [1] の部分に宣言がおけるようになりました。つまり C++ 言語でのと同様に、for(int i = 0; i < 100; i++){ ... } のように記述することができるようになりました。

えー。
もうわかんない。

    • -

追記:
P22

gccにはC99の機能もすでに大部分が搭載されていますが、C99はまだ一般的とは言えないので、本書ではC99の新機能は使いません。

ラジャ。