的宏观定义总览
1 .无参数宏定义和带参数的宏定义(宏函数) )。
2 .宏置换时机和一般预定义宏
3 .宏使用注意事项(简单替换,dowhile ) ) ) ) ) ) ) )宏使用注意事项(以避免分号的吞噬) ) ) ) ) ) ) )宏使用注意事项) ) 65 )
4 .宏函数的特定用法(#字符串的创建和##粘接剂) )。
正文
#define命令是c语言的宏定义命令。 此命令有两种格式:简单的宏定义和参数化的宏定义。
不带参数的宏定义:#define标识符字符串
说明:
)1)宏名称通常使用大写字母
)2)使用宏可以提高程序的通用性和可读性,减少不一致性,减少输入错误,便于修改。 例如,数组大小的一般宏定义
)3)预处理是编译前的处理,但是编译工作的任务之一是语法检查,预处理不进行语法检查。
)4)宏观定义末尾的不加分
(5)宏定义写在函数的大括号外,作用域为后续程序,通常位于文件的开头。
(6)可以用#undef命令结束宏定义的范围
)7)宏定义可以嵌套
)8)字符串“”永远不包含宏
(9)宏定义不分配内存,变量定义分配内存。
3358 www.Sina.com/65http://www.Sina.com/(# define宏名称(参数表)字符串
示例#defines(a,b ) a*b
area=s (3,2 ); 第一步被替换为area=ab,步骤2被替换为area=32;
像函数调用一样,有带参数的宏定义的过程。
(1)实际参加是仪式的话容易发生问题
#define S r*r
area=s(ab ); 第一步是area=rr; 步骤2是area=a ba b;
正确的宏定义是#defines(* )
)2)请勿在宏名称和参数的括号之间添加空格
)3)宏置换只进行置换,不进行计算,也不进行公式的求解
)4)函数调用在编译后的程序运行时进行,分配内存。 宏替换在编译前进行,不会分配内存
)5)宏的悬挂键中不存在类型,也没有类型转换。
)6)函数只有一个返回值,利用宏可以得到多个值
)7)宏展开会使源程序变长,无法调用函数
)8)宏展开不占用执行时间,只占用编译时间,函数调用占用执行时间)内存分配、现场确保、价值交付、返回值)。
宏函数(TBD ) -预处理期间展开
预处理(预编译)、编译、程序集和链接。
哑实结合
__FUNTION__获取当前函数名称__LINE__获取当前代码行号__FILE__获取当前文件名__DATE__获取当前日期__TIME__获取当前时间
#definetest(m,n ) for ) intI=0; I(n ); I () ) m=I; (3358www.Sina.com/
宏替换时机
使用do{…}while(0)结构的宏定义不受大括号、分号等的影响。
常用预定义宏
在“#”或“# #”位置(在宏定义中很有用),宏参数不会重新展开。 可以通过添加老生常谈的话:这是简单的替换,不要在中间计算结果,一定要替换出表达式之后再算。来实现。 此宏的目的是通过在其中展开所有宏的所有参数,确保变换宏中的宏(str )获得正确的宏参数。
参考:
在c语言中使用宏定义