gpt4 book ai didi

gcc - 如何在 C 中类型转换文字

转载 作者:行者123 更新时间:2023-12-04 13:06:33 24 4
gpt4 key购买 nike

我有一个小示例函数:

#define VALUE 0

int test(unsigned char x) {
if (x>=VALUE)
return 0;
else
return 1;
}

我的编译器警告我比较 (x>=VALUE) 在所有情况下都是正确的,这是正确的,因为 x 是一个无符号字符,而 VALUE 的定义值为 0。所以我将代码更改为:
if ( ((signed int) x ) >= ((signed int) VALUE ))

但是警告又来了。我用三个 GCC 版本对其进行了测试(所有版本 > 4.0,有时您必须启用 -Wextra)。

在更改的情况下,我有这个显式转换,它应该是一个带符号的 int 比较。为什么它声称比较总是正确的?

最佳答案

即使使用强制转换,在所有已定义行为的情况下,这种比较仍然是正确的。编译器仍然确定 (signed int)0具有值 0,并且仍然确定 (signed int)x)如果您的程序已定义行为,则为非负数(如果值超出有符号类型的范围,则从无符号转换为有符号是未定义的)。

所以编译器继续警告,因为它继续完全消除 else 情况。

编辑 :要使警告静音,请将您的代码编写为

#define VALUE 0

int test(unsigned char x) {
#if VALUE==0
return 1;
#else
return x>=VALUE;
#endif
}

关于gcc - 如何在 C 中类型转换文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1362420/

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