本网站上的几个问题揭示了混合有符号和无符号类型时的缺陷,大多数编译器似乎都很好地生成了这种类型的警告.但是,GCC在将有符号常量赋值给无符号类型时似乎并不在意!考虑以下程序:
/* foo.c */
#include <stdio.h>
int main(void)
{
unsigned int x=20, y=-30;
if (x > y) {
printf("%d > %d\n", x, y);
} else {
printf("%d <= %d\n", x, y);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用GCC 4.2.1进行编译如下所示在控制台上没有输出:
gcc -Werror -Wall -Wextra -pedantic foo.c -o foo
Run Code Online (Sandbox Code Playgroud)
生成的可执行文件生成以下输出:
$ ./foo
20 <= -30
Run Code Online (Sandbox Code Playgroud)
在将有符号值分配给-30无符号整数变量时,是否有某些原因导致GCC不生成任何警告或错误消息y?