为什么以下代码16的答案是什么?谁能解释一下这个程序的工作原理?
#define SQUARE(n) n*n
void main()
{
int j;
j =16/SQUARE(2);
printf("\n j=%d",j);
getch();
}
Run Code Online (Sandbox Code Playgroud)
如果我们写下面的相同代码,那么答案是4:
//the ans is 4 why?
#include<stdio.h>
#include<conio.h>
#define SQUARE(n) n*n
void main()
{
int j;
j =16/(SQUARE(2));
printf("\n j=%d",j);
getch();
}
Run Code Online (Sandbox Code Playgroud)
unw*_*ind 16
预处理器只是替换文本,与写入完全相同.
因此,宏调用SQUARE(2)变得字面上2*2.
在你的情况下,这意味着整个表达式变为16/2*2,因为C的优先级规则评估为(16/2)*2,即16.
宏应始终括在括号中,并且每个参数都包含在内.
如果我们这样做,我们得到:
#define SQUARE(n) ((n) * (n))
Run Code Online (Sandbox Code Playgroud)
替换为16/((2) * (2)),评估为16/4,即4.
围绕每个参数的括号使事情变得像SQUARE(1+1)按预期方式工作,没有他们打个电话,如16/SQUARE(1+1)将成为16/(1+1*1+1)它16/3,即不是在所有你想要的东西.
| 归档时间: |
|
| 查看次数: |
1777 次 |
| 最近记录: |