Previous | ToC | Next |
というわけで某プロジェクトのコードを十数年前に C++ ではなくて C で書い たものをいまだに使い回しているわけですが、Cも昔に比べると随分便利になっ てます。
以下ちょっと技巧的かもしれませんが、例を。 速度はあまり問題ではないんだけど、ちょっと複雑なフラグによる処理をした い、という状況、具体的な例としては、 flag が 0,1,2,3 の値を取り、それによって 変数 x に式 a, b, c, d のどれかをセットしたい、という状況を考えます。 ruby なら
x= [a,b,c,d][flag];と書くところです。昔の C だと、switch 文を使って
switch(flag){ case 0: x=a; break; case 1: x=b; break; case 2: x=c; break; case 3: x=d; break; }と書いたところでしょう。 break をいれるのを忘れるとか default (ここで は使ってませんが)のスペルを間違えるとかで色々な楽しいことが起こります し記述量も多くなってます。これが、今どきの C だと (x 等が double だと して)以下のように書けるようです。
double cases[]={a,b,c,d}; x = cases[flag];ruby のように1行とはいきませんが、switch を使うのに比べるとはるかにま しです。もちろん、性能的には色々問題があります。 a, b, c, d がそれぞれ 複雑な式とか関数であってもどちらも同じように動きますが、 switch は成り たったところで break で switch 文が終わりますが、配列を作るとまず全部 の要素が評価されます。まあでも、性能が問題にならないところであれば使っ てもいいのではないでしょうか?
Previous | ToC | Next |