栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C/C++中define函数问题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C/C++中define函数问题

大家在学习C语言与C++时肯定都使用过预编译指令,例如#define PI 3.14 有了这条指令,程序会在编译前将预编译指令下所有的PI替换为3.14,这么做有好处也有坏处,这样的替换不会进行类型检测,但却可以让一些可能变动的值十分方便的进行批量修改,进而提高编程效率。

这里主要叙述一个宏定义函数问题:

#include
#define s(x) 4*x*x+1
int main(){
	int a;
	int i=1,j=2;
	a=s(i+j);
	printf("%dn",a);
} 

这段代码的运行结果为多少呢?

37?

如上代码的运行结果为:

控制台显示为9而非很多人以为的37,这是为什么呢?

我们试着在宏定义时把X左右用括号括起来,代码如下:

#include
#define s(x) 4*(x)*(x)+1
int main(){
	int a;
	int i=1,j=2;
	a=s(i+j);
	printf("%dn",a);
} 

运行结果为:

 

很明显,从这两个结果可以看出:在没有加括号的时候,预编译指令替换的内容为:

4*1+2*1+2+1=9

而加了括号后,预编译指令替换的内容为:

4*(1+2)*(1+2)+1=37

由此可以得出,在使用宏定义函数时,我们需要格外的注意运算符的结合性与优先级,在合适的位置加上括号,确保程序计算结果为需求结果。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/979782.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号