我需要根据所选的选项将宏映射到正确的值,例如
#define A { if (fel == 1) x; if(fel != 1) y; }
如果A
为1,我希望x
假设fel
的值,否则它必须采用值y
。
我错过了哪里?
答案 0 :(得分:3)
宏是预处理程序指令,意思是 - 它们在编译之前和运行之前被扩展。
因此,您编写此内容的方式,A
将逐字取代{ if (fel == 1) x; if(fel != 1) y; }
,而不是x
或y
。
大多数时候都可以避免使用宏。为什么不将A
用作变量,而不是宏?
如果fel
是编译时已知的常量或宏本身,则有#if
的选项,但看起来它是正常变量。
答案 1 :(得分:2)
你做不到。宏替换在预处理阶段完成,您无法根据运行时条件进行设置。
相反,您可以将A
定义为变量:
A = (fel == 1)? x: y;
答案 2 :(得分:0)
使用三元运算符定义宏:
#define A ((fel == 1) ? x : y)
只有在fel
,x
和y
都在范围内的情况下使用宏时,该宏才有效。
答案 3 :(得分:0)
if
是一个语句,而不是表达式,因此它不返回任何值。您需要将其作为表达式编写,如使用其他人建议的三元运算符,或使用GCC extension