考虑:
int32_t f() {
return 0x80000000;
}
为什么这不会导致编译器警告(至少在 GCC 上)? 0x80000000 超出
int32_t
的范围( INT32_MAX
是 0x7fffffff
)。我相信这应该会导致隐式转换 - 对吗?进一步考虑:
if (f() == 0x80000000)
foo();
以上导致 GCC 没有警告。然而
int32 ret = f();
if (ret == 0x80000000)
baz();
导致“警告:有符号和无符号整数表达式之间的比较”。我相信这是因为 0x80000000 由于超出
unsigned int
的范围而具有 int
类型。那是对的吗?假设我的假设都没有错,为什么第一次比较不会引起警告?
最佳答案
相关的警告开关似乎是 -Wconversion
, which is not activated by -Wextra
。
关于c - 为什么从返回 int32_t 的函数返回 0x80000000 不会导致警告?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32656460/