【问题标题】:How to explain define MUX(a,b) a*b? [duplicate]如何解释定义 MUX(a,b) a*b? [复制]
【发布时间】:2021-08-15 15:30:36
【问题描述】:
#define MUX(a,b) a*b

MUX(10-5,10+5) = 10+5*10-5 = 10+50-5 = 55

我认为MUX(10-5,10+5) = (10-5)*(10+5) = 75,但这是错误的。

为什么?谁能解释一下?

【问题讨论】:

  • 这就是为什么你应该在宏参数周​​围加上括号
  • #define MUX(a,b) a*b 替换为#define MUX(a,b) ((a)*(b)),您将获得所需的行为。
  • 如果您研究预处理器的输出,您就会明白原因。查看副本的链接。

标签: c macros c-preprocessor


【解决方案1】:

这是因为宏替换完全是文本的。如果您需要括号来正确算术,它们必须在替换文本中。

【讨论】:

  • 宏替换基于预处理器令牌;它不完全是文本。
猜你喜欢
  • 2013-10-07
  • 2021-10-06
  • 2019-10-27
  • 1970-01-01
  • 2017-01-21
  • 2013-06-25
  • 2013-11-19
  • 2021-11-28
  • 2015-02-09
相关资源
最近更新 更多