c++ - 我怎样才能让 g++ 打印关于函数参数类型转换的警告?

标签 c++ g++ warnings compiler-warnings

<分区>

Possible Duplicate:
Can I make GCC warn on passing too-wide types to functions?

当我将有符号整数传递给采用无符号整数的函数时,有没有办法让 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 将 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++ 一起正常工作?

最佳答案

来自 g++ 的手册页:

Warnings about conversions between signed and unsigned integers are disabled by default in C++ unless-Wsign-conversion is explicitly enabled.

关于c++ - 我怎样才能让 g++ 打印关于函数参数类型转换的警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13028356/

相关文章:

c++ - int t[1000000]={1,2,3};产生一个大的二进制文件,为什么?

c++ - c 需要可变参数

ant - 如何删除特定的 Cobertura 警告?

c++ - C/C++ 程序将输出(int)返回给其他程序

c++ - 书中的一个测验 "C++ Strategies and Tactics"

c++ - 添加可变数量的数字

c++ - 大写字符,topper 是如何工作的?

VC++ 和 g++/Xcode 之间的 C++ 模板函数差异

html - 为什么 Visual Studio 警告未终止的字符串常量

jquery - 如何在 jQuery 下拉菜单中附加一组元素符号?