Chr*_*ris 6 c macros multiline
我遇到了一个在C头文件中定义的宏,我对理解有点麻烦.
#if BAR
#define FOO(s,err) \
((SOMEPOINTER)(s))->VALID != SOMEVARIABLE \
? (err) \
:
#else
#define FOO(s,err)
Run Code Online (Sandbox Code Playgroud)
就是这样.我理解if/ else正在发生什么,但我不确定第一个宏定义FOO是做什么的.显然有一个三元操作正在进行,但我很好奇,->因为我在网上找不到它的引用.我也很好奇这里似乎没有任何返回值.如果不管结果如何都没有返回,那么进行比较的重点是什么?说实话,那里的"\"家伙也吓坏了我.
要回答您的疑问,
它->是一个结构指针解引用运算符,用于将指针的成员变量引用到结构类型.
的\是用来写多行宏.参考C11标准,第6.10.3章,
参数由标识符的可选列表,其范围从它们在标识符列表声明延伸指定,直到新的行终止的字符
#define预处理指令.
因此,要跨越多行的MACRO定义,您需要使用\.
#defineMACRO不会返回任何值.它被认为是预处理阶段的文本替代品.