【发布时间】:2012-10-23 10:24:06
【问题描述】:
可能重复:
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 作为其第三个参数,这通常是一个无符号整数。然而,命令:
g++ -Wall -Wextra -Werror -pedantic -W -Weffc++ -Wconversion test.c
它包含我知道的每个警告标志,在编译时不会产生错误或警告,并且在运行时会产生损坏的堆栈。
gcc -Wall -Wextra -Werror -pedantic -W -Wconversion test.c
将产生关于隐式转换的错误。为什么 -Wconversion 标志不能与 g++ 正常工作?
【问题讨论】:
-
@remi 对不起,看到你的评论太晚了。如果你发布一个答案,我会删除我的
-
@RandolphCarter 关于重复:另一个问题涉及自动转换,但类型不同。我在自己寻找问题的答案时没有遇到它,它提出的答案(使用 -Wconversion)无论如何都不能解决问题。
-
感谢 -Wsign-conversion 位!这正是我所缺少的。
标签: c++ g++ warnings compiler-warnings