そこはツッコミどころではない.
EETimesの記事「ソース・コードに潜むバグを発見、Coverity社の静的解析ツール (2007/05/18)」にあった例題.
char * PrintMe() { char str[10]; strncpy(str, "hello world", 9); str[9] = 0; return str; }
strncpyは特に問題ではない.ここは注意が向いてしまうような怪しい関数なら,何でも構わない.μITRON仕様なら,snd_mbxとかね.
出展者が期待するオチは,「ほらほら,str系のほうに意識が行っちゃって,auto変数をリターンしてしまっていることに気づかないでしょ.人間ってダメよねぇ」って辺りのはず.
でも,GCCラヴァーな我々には,もう少し違うオチがある.
上記のコードをgccでコンパイルすると,特にオプションを付けなくても,
PrintMe.c:6: warning: function returns address of local variable
と警告してくれるのであった.この例だけでいうと,そんな高価そうなソフトなど要らない.
gccに限らず,最近のコンパイラは,lint並みにかなり細やかな警告を発してくれる.
この手のツール屋さんの技術営業担当者は,さぞかし大変だろうなぁと思わなくもない.