C中的#define预处理程序指令后冒号?

时间:2015-01-29 13:12:53

标签: c

您好我正在理解一个具有以下构造的C代码, #define ABD 1:0 这是什么意思?特别是":"在#define这里做什么?

2 个答案:

答案 0 :(得分:8)

int res = (n == 10)? ABD;

现在,如果n = 10,则res = 1其他res= 0

它用于三元运算符?:

因为MACRO

,基本上ABD1:0取代
#define ABD 1:0

答案 1 :(得分:2)

#define预处理指令[AKA MACRO]可以被视为文本替换

C99标准引用第6.10章,#define的语义是

# define identifier replacement-list new-line

与您的代码相比

#define ABD 1:0

ABD标识符 [也称为宏名称],1:0替换列表。除了作为替换列表的一部分之外,:没有单独的含义。

相关,第6.10.3章,第9段,

  

表单

的预处理指令
# define identifier replacement-list new-line
  

定义了一个类似于对象的宏,它使宏名称的每个后续实例都被构成指令其余部分的预处理标记的替换列表替换。

因此,如果您的代码中某处有#define ABD 1:0ABD的MACRO,则在预处理阶段,ABD的所有出现都会被1:0替换。< / p>