让我们看看我的代码T.T
我定义的宏如下所示
这是我的宏头文件。macro.h
#define BUZZER_PWM PWMA
#define BUZZER_PWM_CH 0
#define ENABLE_PWM(pwm,ch) (pwm)->POE |= PWM_POE_PWM##ch##_Msk 并调用另一个cfile中的宏。
ENABLE_PWM(BUZZER_PWM,BUZZER_PWM_CH);我预测了预编译后的结果
PWMA -> POE |= PWM_POE_PWM0_Msk;但
PWMA -> POE |= PWM_POEBUZZER_PWM_CH_Msk;结果就是。有什么解决方案吗?
抱歉,我的英语水平太差了..
发布于 2020-06-25 17:57:16
要确保宏参数(特别是在本例中为BUZZER_PWM_CH )在连接(PWM_POE_PWM##ch##_Msk)之前得到展开,请使用另一个宏。
示例文件macro.c
#define BUZZER_PWM PWMA
#define BUZZER_PWM_CH 0
#define ENABLE_PWM(pwm,ch) ENABLE_PWM_(pwm,ch)
#define ENABLE_PWM_(pwm,ch) (pwm)->POE |= PWM_POE_PWM##ch##_Msk
/* expected expansion */
ENABLE_PWM(BUZZER_PWM,BUZZER_PWM_CH);
/* wrong expansion */
ENABLE_PWM_(BUZZER_PWM,BUZZER_PWM_CH);扩展为
$ gcc -E macro.c
# 1 "macro.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "macro.c"
(PWMA)->POE |= PWM_POE_PWM0_Msk;
(PWMA)->POE |= PWM_POE_PWMBUZZER_PWM_CH_Msk;https://stackoverflow.com/questions/62572209
复制相似问题