unsignedintを受け取る関数にsignedintを渡したときにgccまたはg++に警告を生成させる方法はありますか?
例えば:
int main(){
char buf[8];
int i;
for(i=0;i<6;i++)
buf[i] = 'a';
buf[6]='\0';
strcat(buf, " ");
strncat(buf, "happystacksmashingstring",-1 );
return 0;
}
strncatは3番目の引数としてsize_tを取りますが、これは多くの場合unsigned intであるため、スタックスマッシングが発生します。それでも、コマンド:
g++ -Wall -Wextra -Werror -pedantic -W -Weffc++ -Wconversion test.c
これには、私が知っているすべての警告フラグが含まれており、コンパイル時にエラーや警告が発生せず、実行時にスタックが破壊されます。
gcc -Wall -Wextra -Werror -pedantic -W -Wconversion test.c
対照的に、暗黙の変換に関するエラーが発生します。-Wconversionフラグがg++で正しく機能しないのはなぜですか?