しゃけなべいびー雑多

シャケについて真剣に語ります(嘘)

C言語 if文の条件処理順番

おはようございます。こんにちは、こんばんは。

 

もう、11月も7日になるとは。早いものです。

 

静的解析ツールなどを使用すると、if文の条件式などでよく警告が出るので解除しようといじるのですが、いじってバグを出した人がいたので備忘録。

 

if ( a && b && c ) 

とある場合、aを判定後にb,cと続くのが標準仕様です。

aが真であればb,cの判定は行われません。

で、

if ( size < 0 && size=hoge()<0 ) 

というif文を

size = hoge();

if ( size <  0 ) {

}

という風に解体してしまった結果、本来sizeが0より小さい場合にhoge()を呼ぶはずが必ずhoge()を呼ぶようになってしまい。変な動作をするようになっていました。

 

そもそものif文の条件処理の書き方変すぎますが、だからといって解体する場合は解体する人の責任ですのでちゃんと言語仕様に沿って解体しましょう。

 

この解体を行った人は、動作に影響ないと思って動作確認をしていなかったので、問題発生に気づくまでに時間がかかってしまいました。

if文などの条件分岐をいじる場合は動作確認はしましょう。

そして、変更点は他人に一応チェックしてもらいましょう。チェック体制がないのであれば諦めて運にまかせましょう。いやいや、頑張って体制作りしましょう。

 

他人の書いたソースコードを甘く見ないことです。特にレビューのされていなかった古いものに関しては、解析する時間がないのであれば不用意に触らないことです。静的解析などの警告も、「勘弁してください、動いているカラー。」と言って切り抜けましょう。

いやはや、「動いているカラー。」を言い訳にしないように工数を管理したいものです。

理想と現実の壁は厚く高く硬い。

 

では、シャケなベイビー!!