无法识别的C宏

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是做什么的.显然有一个三元操作正在进行,但我很好奇,->因为我在网上找不到它的引用.我也很好奇这里似乎没有任何返回值.如果不管结果如何都没有返回,那么进行比较的重点是什么?说实话,那里的"\"家伙也吓坏了我.

Nat*_*tta 7

要回答您的疑问,

  1. ->是一个结构指针解引用运算符,用于将指针的成员变量引用到结构类型.

  2. \是用来写多行宏.参考C11标准,第6.10.3章,

参数由标识符的可选列表,其范围从它们在标识符列表声明延伸指定,直到新的行终止的字符#define预处理指令.

因此,要跨越多行的MACRO定义,您需要使用\.

  1. #defineMACRO不会返回任何值.它被认为是预处理阶段的文本替代品.