風で飛んでいくチラ裏

気ままに雑記メモ書き殴り。古い記事は別blogからの引っ越しなのでレイアウトがアレです。

for文の中のコンマ

※PICで書いたけど普通の(?)Cでも多分同じ

#define MAX 64
int i;
char str[MAX];

/* strにMAXまで文字を入れる適当な処理 */

for(i = 0; i < MAX, str[i]; i++){
	putchar(str[i]);
}

こんな文があると、for文終了の評価は (i < MAX) は実行されるが評価されず、(str[i]) だけが評価される。

strのバッファ内にいっぱいいっぱいまでデータが詰まっている、もしくはバッファを0初期化していない状態で文字列をヌル止めしていない、 とかの場合、str[MAX-1]を超えてアクセスしちゃう可能性もあるかも。

for(i = 0, j = 0; i < MAX && j < MAX; i++, j++){
	...
}

初期化部分に複数の処理を書くこともできるように、コンマで区切るのは文法違反ではないので、条件文の書き方には注意すべし。
(最初の例も意図から察して && でつなぐのが正解)