我正在尝试使用以下公式制作一个宏:(a^2/(a+b))*b
,我想确保没有除法零。
#define SUM_A( x, y ) if( x == 0 || y == 0) { 0 } else { ( ( ( x * x ) / ( ( x ) + ( y ) ) ) * ( y ) )}
然后我在 main 中调用宏:
float a = 40, b = 10, result;
result = SUM_A(a, b);
printf("%f", result);
我试过在 if 函数周围使用方括号,但我总是在 if 语句之前遇到语法错误。我也试过使用返回,但我在某处读到你不应该在定义中使用它。
最佳答案
你不能使用 if 语句,因为 #define
被预处理器解释,输出将是
result=if( x == 0 || y == 0) { 0 } else { ( ( ( x * x ) / ( ( x ) + ( y ) ) ) * ( y ) )}
这是错误的语法。
但另一种方法是使用三元运算符。将您的定义更改为
#define SUM_A( x, y ) ((x) == 0 || (y) == 0 ? 0 : ( ( ( (x) * (x) ) / ( ( x ) + ( y ) ) ) * ( y ) ))
请记住始终将您的定义放在括号中,以避免在替换时出现语法错误。
关于c - 是否可以在 #define 中使用 if 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12989298/