C言語は難しいと云う風評があるらしい。
実のところ、C言語はマクロアセンブラ並みの簡単な言語で、決して難しくはない。
ただ、書いた奴が下手だったらどうしようもない。
if( i == 1 ) は
if( i=1 ) とやってしまいそうなので
if( 1==i ) が望ましいとかは
そういう知ったかブリはどうでもいい。
どうしてもトラブルの原因だっていうなら
if( i=1 )をワーニングくらい出すように要望書を書けばいいのだ。
それをしないから「知ったかブリ」でしかないのだ。
で、閑話休題。
例えば、実行時のパラメータとして、1~3を指定できるとしよう。
int option = -1; /* 0 でもいいし、99でもいい。1~3以外なら何でもOK */
if ( isdigit(argv(1)) ) {
option = atoi(argv(1)));
}
switch(option) {
default: /* error */ break;
case 1: 1 の処理(); break;
case 2: 2 の処理(); break;
case 3: 3 の処理(); break;
}
void 1 の処理() { … }
void 2 の処理() { … }
void 3 の処理() { … }
な感じに書いてくれれば、
短いので読みやすいがこれを
if ( !strcmp(argv(1),”1″) {
長い1の処理
・・・
※が延々と続く。
・・・
} else if ( !strcmp(argv(1),”2″) {
長い2の処理
・・・
※が延々と続く。
・・・
} else if ( !strcmp(argv(1),”3″) {
長い3の処理
・・・
※が延々と続く。
・・・
} else {
エラーの処理
※が延々と続く。
}
と書かれただけで、長くて読みにくい。
だが、これは他の言語でも同じハズだ。
よく見かけるログ出力にしても
int debug_flag = 0;
if( debug_flag && ログ処理(・・・とっても長い・・・) );
を1999年頃のプリプロセッサなら・・・
int debug_flag = 0;
#define DEBUG_LOG(…) if( debug_flag && ログ処理(__VA_ARGS__) );
で済むハズ。※もう少し古いと妙な書き方になる。
そんな3簡単に気づたプチなアイデアすら出てこない。
思いつかないだけなのか?
もしかしたら今現在の一般的なC言語の参考書の出来が悪すぎるのかもしれない。
それ以上に
一番問題なのは
テスト・エミュレーターを作る気が全くないことかもしれない。
予算とか時間とか理由はついて来るが・・・
本当のところは
UIと云えばGUIしか見えない時世なので
エミュレーターって何?
何作ればいいんだぁ?
なんだろうなぁ・・・(終わってる
※エミュレーター:実機でテストすると延々と終わらないテストを手っ取り済ませるためのツール。実機が数MHzから数GHzに高速化されたら、すたれてしまったらしいが、シェルスクリプトとC言語のプログラムの組み合わせを考えると、シェルスクリプト自体がエミュレータでもあるが、今となってはエミュレーターという昔の臓器の名残(≒尾てい骨)の扱いになっている。