先日, 以下のようなコードを書いたら先輩に注意されてしまいました.

if ((pStruct != NULL) && (pStruct->param == VALUE)) {
   ...
}
else {
   ...
}

なんでも, コンパイラによっては前の判定で偽になっても後の判定を行ってしまうもの
があり, 結果として後の判定で NULL ポインタアクセスとなってしまうのだそうです.

なので, この場合は初めに NULL チェックだけの if を書き, メンバの判定に if を
もう一つネストして書かなければだめだとのことですが, それだとひどく冗長なコード
のような気がしますし, else の内容を 2 度書かなければならなくなってしまいます.

私は今まで (といっても 2, 3 年ですが) この書き方で問題になったことがないの
ですが, 実は論理式の評価の順番は規定されてはおらず, 今までたまたま助かって
いただけなのでしょうか.