そこはツッコミどころではない.

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並みにかなり細やかな警告を発してくれる.
この手のツール屋さんの技術営業担当者は,さぞかし大変だろうなぁと思わなくもない.