首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用#define定义数字的平方

使用#define定义数字的平方
EN

Stack Overflow用户
提问于 2019-06-26 04:20:58
回答 2查看 0关注 0票数 0

我只是经历了一些在访谈中经常被问到的代码。我提出了一些问题,如果有人可以帮我解决这个问题?

我现在对此感到困惑,

代码语言:javascript
复制
#include <stdio.h>
#include <conio.h>

#define square(x) x*x

main()
{
      int i, j;
      i = 4/square(4);
      j = 64/square(4);
      printf("\n %d", i);
      printf("\n %d", j);
      printf("\n %d", square(4));
      getch();
}

输出是:

代码语言:javascript
复制
 4
 64
 16

我想知道,为什么square(4)当我分开它时返回1?我的意思是,当我分割它时如何得到值4和64,但是当直接使用时我得到16 !!

EN

回答 2

Stack Overflow用户

发布于 2019-06-26 12:50:45

编写时i=4/square(4),预处理器会将其扩展为i = 4 / 4 * 4。 因为C组操作从左到右,编译器将其解释为i = (4 / 4) * 4,相当于1 * 4

你需要添加括号,如下所示:

代码语言:javascript
复制
#define square(x) ((x)*(x))

这样,i=4/square(4)变成了i = 4 / ((4) * (4))。如果你写的话你 需要额外的括号,否则会变成,被评估为,或。xsquare(1 + 1)1 + 1 * 1 + 11 + (1 * 1) + 13

票数 0
EN

Stack Overflow用户

发布于 2019-06-26 13:51:01

代码语言:javascript
复制
i=4/square(4);

扩展到

代码语言:javascript
复制
i=4/4*4; 

相当于

代码语言:javascript
复制
i=(4/4)*4;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档