在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语言的小白分享一些日常小想法,有不足的地方希望大佬们能提出宝贵的意见。