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