这个网站上的几个问题揭示了混合有符号和无符号类型时的陷阱,大多数编译器似乎在生成这种类型的警告方面做得很好。但是,将有符号常量分配给无符号类型时,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;
}
使用 GCC 4.2.1 进行如下编译不会在控制台上产生输出:
gcc -Werror -Wall -Wextra -pedantic foo.c -o foo
生成的可执行文件生成以下输出:
$ ./foo
20 <= -30
-30
将有符号值分配给无符号整数变量时,GCC 是否有任何原因不会生成任何警告或错误消息y
?