[英]Is there a way to define a preprocessor macro that includes preprocessor directives?
[英]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.