我已经定义了如下宏。
#define FALSE 0
#define TRUE (!FALSE)
TRUE
和FALSE
的数据类型是什么?预处理后TRUE
取的字面值是多少?它是编译器依赖的吗?为什么呢?
答案 0 :(得分:7)
#define
预处理程序指令(宏)用于执行文本替换。它会将所有FALSE
替换为0
和TRUE
替换为基本上被评估为!0
的{{1}}。因此,结果数据类型将与1
和0
相同。即整数。
关于1
运算符的用法,它始终生成!
类型的结果。
引用int
标准,章节§6.5.3.3(强调我的)
如果操作数的值不等于0,则逻辑否定运算符
C11
的结果为0;如果其操作数的值比较等于0则为1. 结果的类型为{{1 }} 即可。 [...]
答案 1 :(得分:-2)
在预处理时,宏将替换为文本。
FALSE
将替换为0,TRUE
将替换为1。