使用预处理器命令定义预处理器宏

Define a preprocessor macro with preprocessor comands

我经常使用类似

的语法
#ifdef __cplusplus 
extern "C"
#endif
void myCFunc();

所以我试着让宏的语法像

CFUNC(void myCFunc());

我不确定这是否可以完成(预处理器可以执行其新生成的代码吗?)

失败的想法是这样的

#define CFUNC(ARGUMENT) \
#ifdef __cplusplus \
extern "C" \
#endif \
ARGUMENT;

有没有办法制作一个为预处理器生成代码的宏?

谢谢

您可以根据上下文定义两个不同的宏:

#ifdef __cplusplus
#define CFUNC(ARGUMENT) extern "C" ARGUMENT;
#else
#define CFUNC(ARGUMENT) ARGUMENT;
#endif

CFUNC(FOO)

但是,执行此操作的常用方法如下。它包括大括号,可用于定义和声明。

#ifdef __cplusplus
#define EXTERN_C extern "C" {
#define EXTERN_C_END }
#else
#define EXTERN_C
#define EXTERN_C_END
#endif

EXTERN_C
void foo(void) { ... }
EXTERN_C_END

您可以反转 #define#ifdef:

#ifdef __cplusplus
#define CFUNC(ARGUMENT) \
extern "C" \
ARGUMENT;
#else
#define CFUNC(ARGUMENT) ARGUMENT;
#endif