風で飛んでいくチラ裏

気ままに雑記メモ書き殴り。古い記事は別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++){
	...
}

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

広告を非表示にする
(function(document){ var pres = document.getElementsByTagName("pre") for(var i=pres.length; i--; ){  var el = makeOl(pres[i]) pres[i].appendChild(el) } function makeOl(pre){ var ol = document.createElement("ol") , li = document.createElement("li") , df = document.createDocumentFragment() , br = pre.innerHTML.match(/\n/g) ol.className = "preLine" ol.setAttribute("role", "presentation") for(var i=br.length; i--; ){ var li2 = li.cloneNode(true) df.appendChild(li2) } ol.appendChild(df) return ol } })(document)