Blogブログ

2009-8-28 ITのお話

この C 言語、読めます?

最近、画像認識などやってみたいと思っておりまして。

libCVD を触っております。

 CVD – 概要
 http://savannah.nongnu.org/projects/libcvd/

 CVD Projects
 http://mi.eng.cam.ac.uk/~er258/cvd/

 sourceforge
 http://sourceforge.jp/projects/freshmeat_libcvd/

ところが、ちょっと追っかけるとやっぱり凄いコードが出てきます。めっちゃ読みづらい。可読性って生産性にものすごく大きく寄与すると強く思っている技術者のはしくれとしてはヒジョーにストレスが溜まります。

以下のコード、読めます?
==
bool func()
{
return(++x < max.x || (x=0, ++y < max.y) || (y=0, false));
}
==

うちの社員さんの回答。
==
bool bRet = false;
if( ++x < max.x){
bRet = true;
}
x = 0;
if( ++y < max.y){
bRet = true;
}
y = 0;
return bRet;
==

惜しい。違いますよね。
これだといつなんどきでも x=0,y=0 になってしまう。

論理和なので正になった途端に右の論理判断処理を実行しない、という C 言語の制約です。
おそらく、以下。

==
++ x;
if( x < max.x ){
return true;
}

x = 0;
++y;
if( y < max.y ){
return true;
}

y = 0;
return false;
==

もーちょっとわかりやすく書いて欲しい!!!