如何定义一个 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/