#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方
便,并能在一定程度上提高程序的运行效率,但如果我们不需要到一些细节,很容易因
为这个简单的宏定义引发难以预料的问题宏的定义
(1)简单的宏定义:
- #define <宏名> <字符串>
- 例: #define PI 3.1415926
(2) 带参数的宏定义
先来看一道题:
- #define <宏名> (<参数表>) <宏体>
- 例: #define A(x) x
#define SUB(x,y) x-y
#define MODEIF_ARRAY(ele,offset,value) *SUB(&ele,offset)=value
int array[10]={1,2,3,4,5,6,7,8,9}
MODEIF_ARRAY(array[6],4,0);
for(int i=0;i<10;i++){
cout<<array[i];
}
执行结果:程序可以正确编译,但是运行时会崩溃。
解析:因为宏在预处理的时候,会将MODEFIY_ARRAY(array[6],4,0)替换为*&array[6]-6=0; 即7-6=0;显示会报错。
解决办法:
#define SUB(x,y) (x-y)
总结:
1.定义宏的时候,小心的把参数用()括起来。
2.有时候考虑到整数溢出,要用长整型符号L,或者是无符号长整型。
3.宏定义后面没有;号