关于宏的常见误区

        在C语言中,宏是一个看似功能简单但又是一个非常实用且常用的工具。它作用于C语言程序编译的第一步中,C程序编译的第一步是预处理,在这个阶段进行的是:头文件的展开、宏的替换、注释的消除这三步。

        所以从文字本身的含义来看宏所实现的就是一个简单的替换功能,在程序中我们常把关键的需要变化的常量值定义一个宏来替换它,在定义宏之后的程序段里凡是需要用到这个常量的地方我们就用宏来代替即可,在之后需要更改这个值的时候只需要在定义宏的地方进行更改即可达到对整个程序中所有用到该常量的地方更改的目的。

        所以说到这,宏就是一个“替换”,但是在日常的练习中我们却常常不能将这个“替换”理解得很透彻,接下来我们来看看习题:

(7).下面程序的运行结果是________

#define ADD(x) x+x

void  main()

{

int m=1,n=2,k=3;

int sum=ADD(m+n)*k;

printf("sum=%d", sum);

}

         作为大多数初学者来说我们肯定一眼就能看出答案,这不就是将(m+n)=(1+2)=3的值赋给x那么结果就是(3+3)*3=18。而输出的结果却是10,那这是为什么呢?我们前面有说到,宏就是“替换”所以在题目中我们只需要进行宏的替换然后进行展开即可,并不需要一开始就惯性思维的对(m+n)的值进行运算后再给x,而是直接将x替换成m+n后展开再进行运算,所以结果为什么是10的运算过程就是:1+2+1+2*3=10。

        刚刚接触 C语言的小白分享一些日常小想法,有不足的地方希望大佬们能提出宝贵的意见。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值