gpt4 book ai didi

c - 如果 bool 是 int 的宏,为什么它的大小不同?

转载 作者:IT王子 更新时间:2023-10-28 23:38:48 27 4
gpt4 key购买 nike

我希望有人能解释原因

#include <stdbool.h>

printf("size of bool %d\n", sizeof(bool));
printf("size of int %d\n", sizeof(int));

输出到

size of bool 1
size of int 4

我看过 http://pubs.opengroup.org/onlinepubs/009695399/basedefs/stdbool.h.html这似乎表明 bool 本质上是 _Bool 的宏,当设置为 true 或 false 时,它​​实际上只是整数常量的宏。如果是整数,为什么大小不一样?

我之所以这么问,是因为调试一个我们没有为其分配足够内存的程序花费的时间太长了。

最佳答案

C99 中的 _Bool 类型(typedef'ed to bool in stdbool.h)没有具有标准定义的大小,但根据 C99 标准的第 6.2.5 节:

2 An object declared as type _Bool is large enough to store the values 0 and 1.

在 C 中,最小的可寻址对象(除了位域)是 char,它至少有 8 位宽,并且 sizeof(char) 总是 1

_Boolbool 因此具有至少 1sizeof,并且在大多数实现中,我已经看到,sizeof(bool)/sizeof(_Bool)1

如果你看一下 GCC 的 stdbool.h,你会得到:

 #define bool    _Bool
#if __STDC_VERSION__ < 199901L && __GNUC__ < 3
typedef int _Bool;
#endif

#define false 0
#define true 1

所以如果在编译的时候使用的是老版本的GCC和老版本的C标准,你会使用int作为_Bool类型。

当然,作为一件有趣的事情,看看这个:

#include <stdio.h>
#include <stdbool.h>

int main() {
printf("%zu\n", sizeof(_Bool));
printf("%zu\n", sizeof(true));
printf("%zu\n", sizeof(false));

}

输出:

λ > ./a.out 
1
4
4

GCC 4.2.4、Clang 3.0 和 GCC 4.7.0 的输出都相同。正如 trinithis 指出的那样, sizeof(true)sizeof(false) 产生更大的尺寸,因为它们采用 int 文字的大小,至少是 sizeof (int).

关于c - 如果 bool 是 int 的宏,为什么它的大小不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10630080/

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