QC 语言中布尔值应该使用哪种类型?有没有标准类型?我应该使用#define或枚举类型来表示真和假值吗?
A传统上,C 语言并没有提供标准的布尔类型,部分原因是为了让程序员能够进行合适的空间/时间权衡。(使用int可能会更快,而使用char可能会节省数据空间。[脚注] 然而,较小的类型可能会导致生成的代码更大或更慢,因为它们需要大量的与int.)
不过,C99确实定义了一个标准的布尔类型,只要你包含<stdbool.h>.
如果你决定自己定义,那么在#define和枚举常量之间选择 true/false 的值是任意的,而且没什么太大意思(另见问题 2.22 和 17.10)。可以使用以下任何一种
#define TRUE 1 #define YES 1 #define FALSE 0 #define NO 0 enum bool {false, true}; enum bool {no, yes};
你可能还想使用typedef:
typedef int bool; or typedef char bool; or typedef enum {false, true} bool;
有些人偏好类似以下的变体
#define TRUE (1==1) #define FALSE (!TRUE)或者定义“辅助”宏,例如
#define Istrue(e) ((e) != 0)这些并没有带来任何好处(参见问题 9.2;另见问题 5.12 和 10.2)。