【问题标题】:I define macro as #define SQRT(X)X*X and int x=16/SQRT(4) ,but x is 16 ,why? [duplicate]我将宏定义为 #define SQRT(X)X*X 和 int x=16/SQRT(4) ,但 x 是 16 ,为什么? [复制]
【发布时间】:2021-11-23 09:52:06
【问题描述】:
    #include <stdio.h>    
    #define SQRT(X)X*X
    int main(){
     int x=16/SQRT(4);
     printf("%d",x);
    
     return 0;
    }

这个输出是16,为什么?首先我定义了宏,然后尝试进行计算

【问题讨论】:

  • @AlexF,SQRT(2+2) 会是什么?
  • 请问为什么“square”这个词缩写为“SQRT”?那里没有“t”。
  • @tstanisl - 永远让你的敌人猜测。上是下,左是右,平方是 SQRT。
  • 在使用之前,您需要在初级 C 书籍中学习如何编写类似函数的宏。这是一个超级常见的常见问题解答,任何一本正经的书都会解决。
  • SQRT 通常会做与sqrt(4) = 2、sqrt(9) = 3 相反的事情,这个名字被采用!!。除非您想混淆代码阅读器,否则不要使用它。#

标签: c macros


【解决方案1】:

目前int x=16/SQRT(4); 将扩展为int x=16/4*4;,这显然是 16。使用括号确保宏扩展符合预期:

#define SQRT(X) ((X)*(X))

旁白:SQRT 是宏的一个奇怪名称,因为它通常表示“平方根”。 SQR 或 SQUARE 将是更合适的名称。

【讨论】:

  • 是的,我明白了,谢谢
猜你喜欢
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多