参りました
ET2007に行った時に面白いイベントがやっていました。
C言語のバグ捜しクイズと言うもので、これが結構判らん。と言うかギブなんだが。
写真撮ればよかったなぁ!と会場を出てから気付いたのですが、インタフェースの編集者((葵)さん)のBlogにそれが掲載されている事に昨日気付いたので、そこへのリンクを貼っておきます。
http://www.cqpub.co.jp/interface/default.asp
12月14日の「大脱走マーチ」から「組み込みエンジニアのお祭り」に進む。
http://www.kumikomi.net/hazre/ocha_130/01.html
上記ページの一番最後に問題が掲載されています。
char *PrintMe()
の方は簡単。冒頭のグニャグニャさそり(一応頭を下げて、参りましたのポーズ)をもらいました。が、ギブアップだったのは先の
if( !strcmp(argv[i],"-configure" ))
の方。
当然コンパイルエラーとか警告とかそんなレベルではなく、気付かずやると深刻な問題を引き起こす可能性のある、そんなバグなんでしょう。
誰か判った方、教えて。
と言う訳で、業務で大規模プログラミングとかやっている方、是非ソースコード検証ツールを検討してあげてね。
COVERITY
http://www.coverity.com/index_jp.html
しかしこの体たらくなので、私はとてもじゃないけれど人に、「C言語で開発すれば簡単!」なんて言えませんぜ。
2007-12-25 22:59
nice!(0)
コメント(4)
トラックバック(0)
geteuidのあとに()がないとかは違いますか?
by Sim (2007-12-26 00:34)
geteuid:geteuid() は現在のプロセスの実効ユーザー ID を返す。
ああ!そうか!そんな簡単な事だったのか。なんだよ~~~。
てっきり大域変数の一部なのかと思っていた。
駄目だ、UNIXプログラミングとか行わないから、感覚が鈍い。
get_tidとかref_tskとか書いてくれれば。
by hamayan (2007-12-26 06:59)
私は、
if( !strcmp(argv[i],"-configure" ))
だけでも十分に気持ち悪いのだけど。
文法的には同じでも
if( strcmp(argv[i],"-configure" ) == 0)
と書きたい。
by のりたん (2007-12-26 09:49)
ああそうそう、私も最近はこっち派。
if( strcmp(argv[i]," ;-configure" ) == 0)
明確に0と比較したい!と言う意思表示で。
by hamayan (2007-12-26 10:03)