如何对函数的参数进行类型转换的g ++打印警告?

时间:2012-10-23 10:24:07

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

  

可能重复:
  Can I make GCC warn on passing too-wide types to functions?

当我将带符号的int传递给带有unsigned int的函数时,有没有办法让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 ++?

1 个答案:

答案 0 :(得分:2)

来自g ++的手册页:

  

默认情况下,在C ++中禁用有符号和无符号整数之间的转换警告,除非明确启用了-Wsign转换。