在宏中使用if语句

时间:2015-05-22 09:35:48

标签: c

我需要根据所选的选项将宏映射到正确的值,例如

#define A { if (fel == 1) x; if(fel != 1) y; }

如果A为1,我希望x假设fel的值,否则它必须采用值y

我错过了哪里?

4 个答案:

答案 0 :(得分:3)

宏是预处理程序指令,意思是 - 它们在编译之前和运行之前被扩展。

因此,您编写此内容的方式,A将逐字取代{ if (fel == 1) x; if(fel != 1) y; },而不是xy

大多数时候都可以避免使用宏。为什么不将A用作变量,而不是宏?

如果fel是编译时已知的常量或宏本身,则有#if的选项,但看起来它是正常变量。

答案 1 :(得分:2)

你做不到。宏替换在预处理阶段完成,您无法根据运行时条件进行设置。

相反,您可以将A定义为变量:

A = (fel == 1)? x: y; 

答案 2 :(得分:0)

使用三元运算符定义宏:

#define A    ((fel == 1) ? x : y)

只有在felxy都在范围内的情况下使用宏时,该宏才有效。

答案 3 :(得分:0)

if是一个语句,而不是表达式,因此它不返回任何值。您需要将其作为表达式编写,如使用其他人建议的三元运算符,或使用GCC extension

相关问题