gpt4 book ai didi

c - c 中数据类型的 typedef 与 #define

转载 作者:行者123 更新时间:2023-11-30 20:15:44 26 4
gpt4 key购买 nike

几个月前的一次采访中,有人问我如何在 C 中实现 bool 数据类型。两种最常见的方法是:

预处理器宏:

#define BOOL unsigned char

或者类型定义:

typedef BOOL unsigned char;

所以我想知道使用预处理器宏或 typedef 的确切好处和权衡是什么?我经常发现自己创建诸如“uint16”(用于无符号短整型)和“ucharp”(用于无符号字符指针)之类的数据类型。哪个最好用?

谢谢。

最佳答案

最自然的答案是定义枚举类型:

typedef enum {false = 0, true} BOOL;

但是,重要要注意的是,我们声明的这个 BOOL 类型的行为与 C99 _Bool 类型略有不同(最常用的是通过 stdbool.h 中定义的 bool 宏)。

例如:

int main(void) {
BOOL B; // our type
bool b; // the type from C99

B = -true; // -1
b = -true; // 1

B = true + true; // 2
b = true + true; // 1

return 0;
}

C99 bool 根据 Boolean algebra 的规则进行操作,而我们的 make-do BOOL 的行为就像常规的 int 一样。这是因为 enum 类型的变量实际上是 int

如果您使用的是 C99,那么地球上绝对没有任何正当理由滚动您自己的类型,而不是仅仅使用 stdbool.h 中定义的 bool

不幸的是,如果您使用的是早期标准,则 typedef 的 enum 就已经是最好的了。

关于c - c 中数据类型的 typedef 与 #define,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17247274/

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