概述
- #include<iostream>
- #define SQR(X) X*X
- int main(int argc, char* argv[])
- {
- int a = 10;
- int k = 2;
- int m = 1;
- a /= SQR(k+m)/SQR(k+m);
- cout<<"a="<<a<<endl;
- cout<<"SQR(k+m)="<<SQR(k+m)<<endl;
- return 0;
- }
这道题目的结果是什么啊?
define 只是定义而已,在编择时只是简单代换X*X而已,并不经过算术法则的
a /= (k+m)*(k+m)/(k+m)*(k+m);
=>a /= (k+m)*1*(k+m);
=>a = a/9;
=>a = 1;
上文的解释是不对的,difine 确是定义,仅仅是个字面值,编译时,仅作简单的替代,正解如下:
a/=k+m*k+m/k+m*k+m
=>a/=2+1*2+1/2+1*2+1
=>a/=7
=>a=10/7
=>a=1;
并没有上文解释的(),
正确的做法是
- #include<iostream>
- #define SQR(X) (X)*(X)
- int main(int argc, char* argv[])
- {
- int a = 10;
- int k = 2;
- int m = 1;
- a /= SQR(k+m)/SQR(k+m);
- cout<<"a="<<a<<endl;
- cout<<"SQR(k+m)="<<SQR(k+m)<<endl;
- return 0;
- }
最后
以上就是爱笑秀发为你收集整理的宏定义正解的全部内容,希望文章能够帮你解决宏定义正解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复