宏替换

来源:互联网 发布:淘宝百货店铺名字 大全 编辑:程序博客网 时间:2024/06/05 08:38
宏替换
#define 名字 替换文本
表示后续程序中所有出现名字的地方全部替换为替换文本
例:
#define max(A,B) ( (A) > (B) ? (A) : (B) )
x=max( p+q , s+t );
此时会被替换为
x=( (p+q) > (s+t) ? (p+q) : (s+t) );
如果对各种类型参数的处理一致,则可以将同一宏定义应用于任何数据类型,无需针对不同的数据类型定义不同的max函数
宏调用不是函数调用,是直接将替换文本插入到代码中
使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改
宏定义不分配内存,变量定义分配内存
宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)
对于带参数的宏定义(如例子)宏名和参数的括号间不能有空格。

形式参数不能用带引号的字符串替代,但若在替代文本中参数名以#作为前缀,则结果将被扩展为有实际参数替换该参数的带引号字符串
例:
#define dprint(ex) printf( #ex " = %g\n" , ex)
dprint(x);
此时等价于
printf( " x = %g\n" , x )

预处理器运算符##为宏扩展提供一种连接实际参数的手段,若替换文本中的参数与##相邻,则该参数将被实际参数替代,##与前后的空白符将被删除,并对替换后的结果重新扫描。
例:
#define paste(front,back) front##back
paste(a,b)
此时等价于ab

#undef 名字
取消名字的宏定义

#ifdef和#ifndef用于测试某个名字是否已有定义
例:
#ifndef HDR
#define HDR
#endif
原创粉丝点击