繁体   English   中英

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

[英]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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM