Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 些細な修正, NMZ.t の fclose() 忘れ修正



寺西です。

# もはや、どうでもいい話なんですけど。

SATOH Fumiyasu wrote:
> 
> > 旧K&R時代の古い C から決められている規格でしたら良いのですが、
> > ANSI 以降の規格だと、規格外のコンパイラも存在することになりますので、
> > いつの時点で決められたものかを確認しておきたいと思っています。

やっぱり自分できちんと調べるべきですね。^^;
 
> これかな?
> 
>         http://www.catnet.ne.jp/kouno/c_faq/c3.html#5
> 
> 「References:」に「K&R」という文字が載ってました。

この FAQ からは左から順に評価されることは書いてありますが、
ショートサーキットについては明記されていないので、やっぱり気になって
結局、昔使っていた「プログラミング言語C」を探しだしました。
# 俗に言う 旧K&R本 です。

p207 7.11 論理的AND演算子 
に、&&演算子は必ず左から右へ評価される。第1の非演算数が0であると、
第2の非演算数は評価されない。と、明記されていました。

# ひと安心。ゆっくり眠れる。

ANSI C 以前は C コンパイラの実装の問題(バグ)とかも結構あったので、
上記通りになっていなかったものもあったよう気がしましたが、それは
例外的な(誤った)ものだったわけですね。

そんなものは除外して考えていいわけで、

> 先に i の判断を行うことで、この問題を回避できます。
>  これは、左が偽の場合、右は評価されないということが前提です。
> 
> # 処理系依存の気もしますが、普通はこうなります。
> # 最適化オプションで評価順番が変わるかもしれません。
> # -> どなたか詳しい方いらっしゃいませんか?

前提条件は外して、

 先に i の判断を行うことで、この問題を回避できます。

に修正いたします。
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E