今回は、【C言語】がテーマです。
javaでは拡張for文が使用することができますが、C言語ではどういった実装になるのか?
C言語には存在しない処理になりますので、独自で近しい処理を実装することになります。
おさらい
既存の繰り返し処理(for、while)を組み合わせて実装することとなりますので、まずはおさらいです。
for文の実装
int array[5] = { 1, 2, 3, 4, 5 };
for (int i = 0; i < sizeof(array) / sizeof(int); i++) {
printf("[%d]", array[i]);
}
実行結果



[5]
while文の実装
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文っぽい形式で書くとこのようになります。
※この構文はコンパイルエラーが発生します
int array[5] = { 1, 2, 3, 4, 5 };
for (int token : array) {
printf(token);
}
拡張for文をC言語で表現してみる
C言語で表現すると、このようになります。
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文で実装しましょう。
int array[5] = { 1, 2, 3, 4, 5 };
for (int i = 0; i < sizeof(array) / sizeof(int); i++) {
printf("[%d]", array[i]);
}