宏定义

#define PINT int*

#define int int*

int main()

{

         PINT a;

         int b;

}

上面这段代码中,a与b的数据类型有什么不同???

其实这两者的类型是一模一样的,都是整型指针变量,有初学的同学可能会有疑惑,

在定义b时,明明是用整型定义的,怎么会变成指针类型的变量呢?定义a时,PINT

也不是一种基类型的关键字呀?

小伙伴们可以看一下主函数上面还有俩个行代码

#define PINT int*

#define int int*

这就是我们所谓的 宏定义,,什么意思呢,所谓宏定义就是把中间的字符用后面

的字符进行替换,这个过程是在预编译的时候进行的,在其下面的程序中会将所有

的PINT和int都替换成int*

宏替换过程是在预编译的时候进行的,它不会进行类型检查,而是把所有字符都当

做ASCII码来对待,对其进行简单的替换,这种替换过程会有副作用

下面我们看一个例子

#define ADD(a,b)  a*b

int main()

{

       int a=10,b = 20;

       c = a+b;

       ADD(a,c);

}

在我们自己通常的印象中ADD(a,c)的值应该是300,但大家运行一下就会发现,结果

并不是这样

其实在进行这个过程的时候我们会把ADD(a,c)替换成10*10+20;得到的结果是120;

而不是我们自己认为的300;这就是宏替换的副作用

#undef 关键字可以撤销宏替换,让其在后面的代码中失效



猜你喜欢

转载自blog.csdn.net/mr_h9527/article/details/80184453