gpt4 book ai didi

c - 为什么 GCC 在将有符号文字分配给无符号类型时不产生警告?

转载 作者:太空狗 更新时间:2023-10-29 16:35:07 25 4
gpt4 key购买 nike

这个网站上的几个问题揭示了混合有符号和无符号类型时的陷阱,大多数编译器似乎都能很好地生成这种类型的警告。但是,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 分配给无符号整数变量 y 时,GCC 没有生成任何警告或错误消息是否有某种原因?

最佳答案

使用-Wconversion :

~/src> gcc -Wconversion -Werror -Wall -Wextra -pedantic -o signwarn signwarn.c
cc1: warnings being treated as errors
signwarn.c: In function 'main':
signwarn.c:5: error: negative integer implicitly converted to unsigned type

我想这里的问题是 gcc 实际上非常擅长生成警告,但它默认不会在(有时是意外的)情况下这样做。浏览可用警告并选择一组生成您认为有帮助的选项是个好主意。或者只是全部,并完善代码直到它闪耀! :)

关于c - 为什么 GCC 在将有符号文字分配给无符号类型时不产生警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2771538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com