dongmei 发表于 2022-3-11 21:23:47

这个输出为什么是105呢?

#include <stdio.h>
#define fun(x) x*x
int main() {
        int Result;
        Result = fun(9+9)/fun(3+3);
        printf("%d\n",Result);
       
        return 0;
}
这个输出为什么是105呢?

isdkz 发表于 2022-3-11 21:26:36

本帖最后由 isdkz 于 2022-3-11 21:36 编辑

宏不是函数,它是预定义的规则,它不会得到结果再相除,

而是会直接代入表达式,9 + 9 * 9 + 9 / 3 + 3 * 3 + 3 = 105,

你想改变优先级的话可以改成这样:
#include <stdio.h>
#define fun(x) x*x
int main() {
      int Result;
      Result = (fun(9+9))/(fun(3+3));                         // 注意这里
      printf("%d\n",Result);
      
      return 0;
}

#include <stdio.h>
#define fun(x) (x*x)                  // 注意这里
int main() {
      int Result;
      Result = fun(9+9)/fun(3+3);
      printf("%d\n",Result);
      
      return 0;
}

dongmei 发表于 2022-3-11 21:37:05

isdkz 发表于 2022-3-11 21:26
宏不是函数,它是预定义的规则,它不会得到结果再相除,

而是会直接代入表达式,9 + 9 * 9 + 9 / 3 + 3...

好的,谢谢
页: [1]
查看完整版本: 这个输出为什么是105呢?