今回は、【C言語】がテーマです。
javaでは拡張for文が使用することができますが、C言語ではどういった実装になるのか?
C言語には存在しない処理になりますので、独自で近しい処理を実装することになります。
おさらい
既存の繰り返し処理(for、while)を組み合わせて実装することとなりますので、まずはおさらいです。
for文の実装
1 2 3 4 5 |
int array[5] = { 1, 2, 3, 4, 5 }; for (int i = 0; i < sizeof(array) / sizeof(int); i++) { printf("[%d]", array[i]); } |
実行結果
[5]
while文の実装
1 2 3 4 5 6 7 |
int array[5] = { 1, 2, 3, 4, 5 }; int i = 0; while (i < sizeof(array) / sizeof(int)) { printf("[%d]", array[i]); i++; // 忘れずに! } |
実行結果
[5]
拡張for文の実装
javaの拡張for文っぽい形式で書くとこのようになります。
※この構文はコンパイルエラーが発生します
1 2 3 4 5 |
int array[5] = { 1, 2, 3, 4, 5 }; for (int token : array) { printf(token); } |
拡張for文をC言語で表現してみる
C言語で表現すると、このようになります。
1 2 3 4 5 6 7 |
int array[5] = { 1, 2, 3, 4, 5 }; int token = 0; int i = 0; while ((token = array[i++]) != 0) { printf(token); } |
実行結果
[5]
ん~。。。無理やり書いてみましたが、これだと動作保証がありません。
(array[5]が0である保証が無い)
配列のサイズ文だけ回すとなると、普通にfor文で回した方がシンプルかつ安全です。
結論
かえって処理が複雑になってしまいます。
無理せず従来のfor文で実装しましょう。
1 2 3 4 5 |
int array[5] = { 1, 2, 3, 4, 5 }; for (int i = 0; i < sizeof(array) / sizeof(int); i++) { printf("[%d]", array[i]); } |