在C编程中使用#define指令中的NOT运算符

时间:2015-08-13 13:14:21

标签: c c-preprocessor

我已经定义了如下宏。

#define FALSE   0
#define TRUE    (!FALSE)

TRUEFALSE的数据类型是什么?预处理后TRUE取的字面值是多少?它是编译器依赖的吗?为什么呢?

2 个答案:

答案 0 :(得分:7)

#define预处理程序指令(宏)用于执行文本替换。它会将所有FALSE替换为0TRUE替换为基本上被评估为!0的{​​{1}}。因此,结果数据类型将与10相同。即整数。

关于1运算符的用法,它始终生成!类型的结果。

引用int标准,章节§6.5.3.3(强调我的

  

如果操作数的值不等于0,则逻辑否定运算符C11的结果为0;如果其操作数的值比较等于0则为1. 结果的类型为{{1 }} 即可。 [...]

答案 1 :(得分:-2)

在预处理时,宏将替换为文本。 FALSE将替换为0,TRUE将替换为1。