我试图在另一个宏的定义中使用多个宏,但似乎有问题将它们连接在一起。 这是我正在尝试做的非常简化的版本:
#include #define PICK_SET_A #ifdef PICK_SET_A #define SET A #endif #ifdef PICK_SET_B #define SET B #endif #define ENABLE_VAR_1_A 1 #define ENABLE_VAR_2_A 1 #define ENABLE_VAR_1_B 0 #define ENABLE_VAR_2_B 0 #define MACRO_RESOLVE(var,set) ENABLE_VAR_##var##_##set #define ENABLE_VAR_1 MACRO_RESOLVE(1, SET) #define ENABLE_VAR_2 MACRO_RESOLVE(2, SET) int main(int argc, char **argv) { fprintf(stdout, "VALUE: %dn", ENABLE_VAR_1); return 0; }
我希望结果为0
。
但是,我收到编译错误,因为MACRO_RESOLVE
宏没有解决我期望它的方式:
$ gcc -o asdf asdf.c asdf.c:25:36: error: use of undeclared identifier 'ENABLE_VAR_1_SET' fprintf(stdout, "VALUE: %dn", ENABLE_VAR_1); ^ asdf.c:20:26: note: expanded from macro 'ENABLE_VAR_1' #define ENABLE_VAR_1 MACRO_RESOLVE(1, SET) ^ asdf.c:18:32: note: expanded from macro 'MACRO_RESOLVE' #define MACRO_RESOLVE(var,set) ENABLE_VAR_##var##_##set ^ :229:1: note: expanded from here ENABLE_VAR_1_SET ^ 1 error generated.
因此,当我定义ENABLE_VAR_1
时,看起来SET
没有得到扩展。
由于您正在尝试构建宏名称,因此您需要在此过程中进行足够的中间扩展以扩展所有令牌。 在这里看到它。
#include #define PICK_SET_A #ifdef PICK_SET_A #define SET A #endif #ifdef PICK_SET_B #define SET B #endif #define ENABLE_VAR_1_A 1 #define ENABLE_VAR_2_A 1 #define ENABLE_VAR_1_B 0 #define ENABLE_VAR_2_B 0 #define MACRO_RESOLVE__(M) M #define MACRO_RESOLVE_(V, S) MACRO_RESOLVE__(ENABLE_VAR_ ## V ##_## S) #define MACRO_RESOLVE(var,set) MACRO_RESOLVE_(var, set) #define ENABLE_VAR_1 MACRO_RESOLVE(1, SET) #define ENABLE_VAR_2 MACRO_RESOLVE(2, SET) int main(int argc, char **argv) { fprintf(stdout, "VALUE: %dn", ENABLE_VAR_1); return 0; }
以上就是c/c++开发分享在宏定义中使用多个宏相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/519321.html