if文でのバグをほんの少し減らすかもしれない方法 @C言語
プログラムの基礎はわかってるつもりです。
それでも一人で何万行、何十万行と書いていると
思いもよらないバグに遭遇してしまいます。
まぁ、ひとりじゃなくてもなるんでしょうけど。
そのバグを少しでも減らそうと日々努力しております。
もうご存知の方も居られるかと思いますが、
if(定数==変数) { /*何か処理*/ }
で記述するという方法です。定数を左にもってくるということですね。
例えば、↓みたいなミスを防いでくれます。
int a; if ( a = 3 ) { /*何か処理*/ }
おそらく書いた意図は「aと3が等しかったら」というものです。
しかし、実際はそうではなく、a = 3なので、たぶん常にtrueです。
(処理系によるのかな??)
コンパイラが適切にワーニングやエラーで処理してくれると良いですが、
あんまり詳しくないけど、その辺が細かくないコンパイラもいるんじゃないかな。
ここで↓のように記述してみます。
int a; if( 3 = a ) { /*何か処理*/ }
これだとコンパイラがエラーと判断してくれます。
もちろんif ( a == 3 )
とif ( 3 == a )
は同等の処理を行います。
個人的にはif ( a == 3 )
のほうが可読性は良いと思いますが、
間違いなく意図どおりに動くことが最優先だと思うので、
仕方ないかなぁって思ってます。
いやぁホントにバグっていやですよね。何か問題が起きたとき、原因がわからないのが一番困ります。原因がわかれば、おそらくそれは解決にとても近い位置にいるというこでしょう。
「プログラムは思ったとおりに動くんじゃない。書いたとおりに動くんだ。」
というような話がありますが、その通りですね。
では Good Luck オレ!!