c - 是否可以在 #define 中使用 if 语句?

标签 c if-statement macros c-preprocessor

我正在尝试使用以下公式制作一个宏:(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/

相关文章:

C 运行时类型检查

R,gsub(),在给定某些条件下将 "."替换为 ","

haskell - Emacs : Redefining command in Haskell-mode (haskell-mode-hook)

c++ - SDL2 根本没有收到任何事件

c++ - 运行时堆栈是否保存在内存的数据段中?

c++ - 自动生成开关案例。或者另一个建议

c++ - 来自文字的静态 std::string 对象的宏

macros - 如何在 guile scheme 中扩展宏?

c - 单向链表的展示

java - 由于数据类型,While 循环在计算之前退出