昨日の謎ソースの解説

ソース解析

昨日の日記に書いた謎ソースの解説。

元のソースはこれ。

for(i=0;i<hoge;i++)
  a = b[i] == 0 ;

これを分かりやすく書くと

for( i = 0 ; i < hoge ; i++ )
{
    if ( b[i] == 0 )
    {
        a = 1 ;
    } else {
        a = 0 ;
    }
}

に展開されると思われます。配列の中身を調べて値が’0’の物にFlag bitを立てたかったみたい。

a はポインタで物理アドレスを指し示しているので、これで IOにピコピコ信号が出るのですよ。

昨日の書き方じゃ誰もわかんないよね。失礼しました。

while( a == 0 ) ;

上記も、知らん人が見たら無限ループで止まっちゃうコードだよな。実際にはaの値は、ソフトと関係なく変化するIOだったり、CPUレジスタ値だったりするから抜けてくれるんだけどね。

今日のソースチェック

ポインタ渡しの構造体のメンバーのポインタに、別の構造体のメンバーの配列の添字に配列を使った物を加算した値で配列を参照されていると、もう何が何やら分かりません。

せっかくC言語で書いてるんだから、もう少し分かりやすく書いて欲しかった orz