【发布时间】:2018-04-11 04:14:09
【问题描述】:
我有一小段关于sizeof 运算符和三元运算符的代码:
#include <stdio.h>
#include <stdbool.h>
int main()
{
bool a = true;
printf("%zu\n", sizeof(bool)); // Ok
printf("%zu\n", sizeof(a)); // Ok
printf("%zu\n", sizeof(a ? true : false)); // Why 4?
return 0;
}
输出 (GCC):
1
1
4 // Why 4?
但是在这里,
printf("%zu\n", sizeof(a ? true : false)); // Why 4?
三元运算符返回boolean类型,bool类型的sizeof在C语言中为1字节。
那么为什么sizeof(a ? true : false)会给出四个字节的输出呢?
【问题讨论】:
-
sizeof(true)和sizeof(false)也是 4:ide.geeksforgeeks.org/O5jvuN -
这里更有趣的问题是为什么这个实现是“不一致的”,因为它显然将
_Bool定义为大小为1,而不是true和false。但据我所知,该标准对此没有任何规定。 -
@FelixPalmen 给出
char a;sizeof(a) == 1和sizeof('a') == sizeof(int)的相同原因(在 C 中)。这与实现无关,而与语言有关。 -
您是否尝试打印
sizeof(true)?也许它会让细化更清楚一点(特别是,三元运算符很明显是一个红鲱鱼)。 -
@FelixPalmen
trueis#defined to be 1 bystdbool.h所以是的,这是字面定义。
标签: c boolean sizeof conditional-operator c11