#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 关键字可以撤销宏替换,让其在后面的代码中失效