gpt4 book ai didi

c - 无法识别的 C 宏

转载 作者:太空狗 更新时间:2023-10-29 17:17:51 26 4
gpt4 key购买 nike

我遇到了一个在 C 头文件中定义的宏,我在理解时遇到了一些困难。

#if BAR
#define FOO(s,err) \
((SOMEPOINTER)(s))->VALID != SOMEVARIABLE \
? (err) \
:
#else
#define FOO(s,err)

就是这样。我了解 if/else 发生了什么,但我不确定 FOO 的第一个宏定义在做什么。显然正在进行三元运算,但我对 -> 很好奇,因为我无法在网上找到对它的引用。我也很好奇这里似乎没有任何返回值。如果无论结果如何都不返回任何东西,那么进行比较有什么意义呢?老实说,那里的“\”家伙也让我有点害怕。

最佳答案

回答您的问题,

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

  2. \用于编写多行MACROS。引用 C11 标准,章节 §6.10.3,

The parameters are specified by the optional list of identifiers, whose scope extends from their declaration in the identifier list until the new-line character that terminates the #define preprocessing directive.

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

  1. #define 宏不返回任何值。它在预处理阶段被视为文本替换

关于c - 无法识别的 C 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30383625/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com