在 C #define 预处理器指令之后的冒号



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

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

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

它用于三元运算符?:

所以基本上ABD1:0取代,因为宏

#define ABD 1:0

#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:0这样的宏,并且在代码中的某个地方ABD,在预处理阶段,所有出现的ABD都将被1:0替换。

最新更新