1

重複の可能性:
関数に幅の広い型を渡すことについてGCCに警告させることはできますか?

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++で正しく機能しないのはなぜですか?

4

1 に答える 1

2

g++ のマニュアルページから:

符号付き整数と符号なし整数の間の変換に関する警告は、-Wsign-conversion が明示的に有効にされていない限り、C++ ではデフォルトで無効になっています。

于 2012-10-23T10:36:10.040 に答える