c - 检测 C 宏中是否存在参数

标签 c c-preprocessor variadic-macros

如何定义一个 C 宏 IFARGS(YES, NO, ...) 以便在没有附加参数的情况下调用 IFARGS 产生 NO,并使用一个或多个参数调用 IFARGS 会产生 YES?

我有一个使用 GCC 的答案(见下文),但如果可能的话,我更喜欢 C99 的答案(或证明它的不可能性)。

最佳答案

在 C99 中,可以检测一个宏参数是否为空,但要针对该参数中可能出现的所有可能性(参数本身正在扩展,包含 () 和诸如那)很难。我的宏包P99实现这样的事情,所以你不必太担心。这样你的宏就可以实现为

#define IFARGS(YES, NO, ...) P99_IF_EMPTY(__VA_ARGS__)(YES(__VA__ARGS__))(NO())

正如其名称所示,P99 仅基于 C99 功能构建。

关于c - 检测 C 宏中是否存在参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21474061/

相关文章:

c - 以左括号开头的类对象宏定义

c - 如何使用具有可变数量参数的标记粘贴运算符?

c++ - 重载宏

c - 如何对数组的特定列进行 qsort?

c - 双重释放或损坏(出)中止(核心转储)

c - 如果库使用#defines,应该在哪里声明库?

我可以在中间而不是末尾定义带有 __VA_ARGS 的可变参数 C 预处理器宏吗?

c - 解释一下这个图像对象中的 "scanline pointer array"?

我可以通过同时索引 c 中的两个矩阵来将矩阵的值传递给另一个矩阵吗?

objective-c - #pragma clang 诊断的 Swift 替代方案