欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

#define的小trick

程序员文章站 2022-03-15 22:33:41
...

请看下面这段代码:

#include<stdio.h>
#define SQR(x)  x*x
int main()
{
    int a;
    int k=3;
    a=++SQR(k+1);
    printf("%d",a);
}

大家觉得结果应该是多少呢?
如果不用编辑器编译运行的话,我相信大家会给出各种不同的答案。
最常见的错误就是先算k+1=4,然后就是4*4+1=17,这个结果看似很对,但却忽略了一个地方,就是#define只做替换不做运算。所以不能先算括号里的k+1,。
那么现在这种答案被否定后,又出现了另外一种答案:
3+1*3+1=7,最后++再加1,所以结果等于8,这个看似很合理,而且离正确的答案已经非常地接近,只差了一步就对了,那么它的问题又出现在哪呢?
其实它这样算还是没有理解#define只做替换不做运算,人为地在++后面给它加了括号,就相当于++(k+1*k+1)。
正确的理解应该是这样的:
++k+1*k+1,这样看的话就对了,由于++运算符的优先级高于+,所以先算++k,k就等于4了,后面的k这时也是4,所以结果就是4+4+1=9。
这是个比较经典的题目,大家能把这题理解的话对于#define应该是没问题了。

相关标签: #define