c语言if语句带sizeof

标签 c if-statement sizeof

<分区>

#include <stdio.h>
main()
{
   if (sizeof(int) > -1)
       printf("True");
   else
       printf("False");
}

回答:

False

但根据逻辑 sizeof(int) 返回 2 和 if(2>-1) 返回 1 并且它应该打印 True。

为什么它的行为不一样?

最佳答案

首先,sizeof产生的值(value)属于 size_t这是unsigned类型。 注意

作为 unsigned type 比 signedrank 更高类型,在执行比较时,根据关系运算符的规范,执行通常的算术转换,这意味着将有符号类型提升为无符号类型。

在你的例子中,-1 , 当被视为 unsigned , 代表最高可能 unsigned值(value),因此,难怪

 if (sizeof(int) > -1)

评估为

故事的寓意:尝试比较 signed和一个 unsigned 预期会产生奇怪的结果,就像您的情况一样。您应该启用编译器警告并尝试解决编译器报告的问题。


注意:

来自 C11 , 第 7.19 章,<stddef.h> ,

size_t
which is the unsigned integer type of the result of the sizeof operator.

关于c语言if语句带sizeof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31957514/

相关文章:

c - 我的 C 代码中的逻辑错误

c - 有什么方法可以更改用 c 中的 const 限定符定义的变量中的值吗?

将双指针转换为单指针,反之亦然

c++ - 在单个 IF 语句中测试多个 boolean 值

swift - 快速井字棋 - 获胜线

c - `sizeof(char*)` 总是等于 `sizeof(double*)` 吗?

c - C. 库列表 : libCurl, libssh 或 libssh2 中的 SCP 功能

PHP if/else get_field() 与 WordPress

c++ - sizeof() 的值是由编译器还是链接器决定的?

c++ - 结构根据空基类顺序更改大小