如何检查是否定义了类函数宏?

How to check if a function-like macro is defined?

我的代码中有一行看起来像这样:

#ifndef MACRO(n)

这实际上在大多数编译器上都能正常工作。但是,这在 Solaris 上失败了,因为官方语法是 # ifndef identifier new-line groupopt 并且标识符中不允许使用括号。

检查这个宏是否被定义的正确方法是什么?

你不需要(n),实际上如果你使用它 gcc 会报错:

warning: extra tokens at end of #ifndef directive

这是因为 #ifndef 需要一个标识符而不是表达式,(n) 可能被预处理器忽略

只需检查宏定义名称就可以了:

#ifndef MACRO