「C99のforループはインラインでカウンタの変数を宣言できる」の版間の差分
提供: C言語入門
(ページの作成:「昔のC言語の仕様では、for文のカウント変数を forよりも前に宣言するのが一般的でした。C99では、その部分について改善さ...」) |
(相違点なし)
|
2016年1月9日 (土) 15:55時点における最新版
昔のC言語の仕様では、for文のカウント変数を forよりも前に宣言するのが一般的でした。C99では、その部分について改善されています。
読み方
- C99
- しー きゅうじゅう きゅう
概要
C言語では、forループを書く場合は、forで利用するカウンタ変数を事前に宣言するのが一般的でした。
uint32_t i; for (i = 0; i < 10; ++i) { // doit }
一方で、C++言語では、forの初期化パートで、変数を宣言できます。JavaもC++と同様です。
for (uint32_t i = 0; i < 10; ++i) { ; }
C99でも、仕様が変更され、どこでも変数が宣言可能になりました。 つまり、以下のコードで OK です。
for (uint32_t i = 0; i < 10; ++i) { ; }
ソースコード
/* * declare_counter_inline_for.c * Copyright (C) 2016 kaoru <kaoru@localhost> */ #include <stdio.h> #include <stdlib.h> #include <stdint.h> int main(int argc, char *argv[]) { for (uint32_t i = 0; i < 10; ++i) { } exit(EXIT_SUCCESS); }
コンパイル
cc -std=c99 declare_counter_inline_for.c
失敗する例
-std=c99 を指定しない場合、以下のエラーになります。 gcc 4.6 でコンパイルするとこうなります。
$ gcc46 declare_counter_inline_for.c declare_counter_inline_for.c: In function 'main': declare_counter_inline_for.c:12:2: error: 'for' loop initial declarations are only allowed in C99 mode declare_counter_inline_for.c:12:2: note: use option -std=c99 or -std=gnu99 to compile your code
gcc 4.9 の場合は、以下のようになります。
$ \gcc49 declare_counter_inline_for.c declare_counter_inline_for.c: In function 'main': declare_counter_inline_for.c:12:2: error: 'for' loop initial declarations are only allowed in C99 or C11 mode for (uint32_t i = 0; i < 10; ++i) { ^ declare_counter_inline_for.c:12:2: note: use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code
新しいコンパイラの場合
ただし、新しいコンパイラだとデフォルトの挙動が変わっている影響で、エラーにならずに、コンパイルしてくれるコンパイラもあります。 gcc5 だと、std を指定しなくても、エラーになりません。
$ gcc5 declare_counter_inline_for.c $