使用预处理器命令定义预处理器宏
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
我经常使用类似
的语法#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