#define ? ? 定义宏 ? ? ? ? ? ? 宏常量 ? ? ? ? ? ? ? ? #define MAX 50 ? ? ? ? ? ? ? ? 优点:提高可读性、提高可扩展性(批量修改)、提高安全性 ? ? ? ? ? ? ? ? ? ? 还可以与case配合使用 ? ? ? ? ? ? ? ? 注意:宏常量名建议全部大写,末尾不要加分号 ? ? ? ? ? ? ? ? {函数名、局部变量小写+下划线、全局变量首字母大写、指针变量p、数组arr、字符串str} ? ? ? ? ? ? ? ? case MAX: ? ? ? ? ? ? ? ? 注意:typedef int num;用法和含义上的区别 ? ? ? ? ? ? 预定义好的宏常量: ? ? ? ? ? ? ? ? __func__ ? ?获取函数名 ? ? ? ? ? ? ? ? __FILE__ ? ?获取文件名 ? ? ? ? ? ? ? ? __LINE__ ? ?获取当前行号 ? ? ? ? ? ? ? ? __DATE__ ? ?获取当前日期 ? ? ? ? ? ? ? ? __TIME__ ? ?获取当前时间
? ? ? ? ? ? 宏函数: ? ? ? ? ? ? ? ? 宏函数其实是带参数的宏 ? ? ? ? ? ? ? ? 宏函数不是真正的函数,不检查参数的类型,没有传参,没有返回值, ? ? ? ? ? ? ? ? 只有替换后的运算结果 ? ? ? ? ? ? ? ? 如何实现: ? ? ? ? ? ? ? ? ? ? 1、把代码中使用到宏函数的地方替换为宏函数后面的代码 ? ? ? ? ? ? ? ? ? ? 2、宏函数代码中使用的参数替换为调用者提供的参数 ? ? ? ? ? ? 宏的二义性: ? ? ? ? ? ? ? ? 由于宏的位置不同,参数不同导致宏由不同的功能,叫做宏的二义性 ? ? ? ? ? ? 如何避免宏的二义性: ? ? ? ? ? ? ? ? 宏函数整体加小括号,每个参数都加小括号保护 ? ? ? ? ? ? ? ? 注意:在使用宏函数时,不要提供带自变运算符的变量作为参数
? ? ? ? ? ? 注意:容易出选择题,直接问哪个有二义性,提供宏函数问宏函数的结果
? ? ? ? ? ? 注意;;宏函数可以用大括号保护代码,定义宏常量、宏函数时不能换行的 ? ? ? ? ? ? ? ? 但是可以在一行的末尾用续航符\换行 ? ? ? ? ? ? ? ? #define SUM(a,b) ((a)*(b)\ ? ? ? ? ? ? ? ? *(a))
|