宏定义
1、
defineMAXSIZE100
1’宏定义的作用域:定义开始到该文件结束
2’所有出现名字这个标识的地方都被替换为替换文本,只对该标识起作用,对于引号中的字符串【“MAXSIZE”】/标识一部分【MYMAXSIZE】不起作用
3’宏定义是在预处理阶段进行文本替换
奇怪的用法:
1)宏定义可以带参数,不同的宏调用可以使用不同的参数
undef取消宏定义,
undefabs(n)
printf("函数abs(n):%d\n",abs(-5));
definedprint(arg)printf("theargis:%g\n",arg)
intmain(){
dprint(2/7);
definedprint(arg)printf("the"参数名可以表示由实际参数原格式的字符串形式展示,且可以和前后字符串直接连接在一起
双
definevariable_name(name,i)namei
intmain(){
for(inti=0;i10;i++){
intvariable_name(t,i)=i;
printf("%d\n",variable_name(t,i));
}
}
注:
1’条件编译语句define中可以使用sizeof,因为预处理不计算替换文本的值,只单纯的进行文本替换
3’typedef类型别名,是由编译器解析的,也可以用作文本替换功能,但是能力强于预处理时期的
typedefint(*sump)(int,int);
intsum(inta,intb);//此处不能写成sumpsum,sump是函数指针,不是函数类型
intmain(){
sumpsp=sum;
printf("(*sp)(1,2):%d\n",(*sp)(1,2));
}
intsum(inta,intb){
returna+b;
}
1’’sump是个指向函数的指针sump=sum是指向函数sum的首地址,与数组inta[10]中a/a[0]类似。
2’’typedef可以使程序参数化,提高程序可移植性,如果使用的数据类型与机器有关,可以使用typedef另起别名,使用别名定义变量/函数,在需要移植时只需要替换typedef所别名的类型即可(使用条件宏elif/#else,或者使用分支语句做typedef别名都可)。





