typedef vs #define for c中的数据类型

时间:2013-06-22 04:21:25

标签: c macros typedef

几个月前,在一次采访中,我被问到如何在C中实现一个布尔数据类型。两种最常见的方式是:

预处理器宏:

#define BOOL unsigned char

或者typedef:

typedef BOOL unsigned char;

所以我想知道使用预处理器宏或typedef的确切好处和权衡取舍是什么?我经常发现自己制作的数据类型如“uint16”(对于unsigned short)和“ucharp”(对于unsigned char指针)。哪个最好用?

感谢。

1 个答案:

答案 0 :(得分:2)

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

typedef enum {false = 0, true} BOOL;

重要需要注意的是,我们声明的此BOOL类型与C99 _Bool类型的行为略有不同(最常用于{ {1}}中定义的{1}}宏。

例如:

bool

C99 stdbool.h根据Boolean algebra的规则行事,而我们的make-do 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; } 就像常规bool一样。这是因为BOOL类型的变量实际上是int

如果您使用的是C99,那么地球上完全没有合理的理由来推广您自己的类型,而不仅仅是使用enum中定义的int

如果您使用的是较早的标准,那么不幸的是,typedef'd bool的效果会很好。