define 宏定义命令
程序员文章站
2024-03-21 10:52:16
...
(1)作用
1.1 定义常量
#define PI 3.14
//如此使用的缺点:
//1. 由于宏替换的数据是没有数据类型的,所以编译器无法进行类型安全检查。
//2. 宏替换的记号从未被编译器看到,如PI就可能没有进入编译器的符号表。如果由于此宏替换产生报错将难
以调试。
//3. 如果大量使用PI,可能导致目标码中有多份“3.14”。
// 替换建议:
// 使用 `const float PI=3.14`;
// 或者`enum { PI=3.14 }` ,相对于const,enum更像#define,比如你无法区PI的地址。
(2)定义宏函数
如#define CALL_WITH_MAX(a,b) ((a)>(b)?(a):(b))
初看如此定义没多大问题,小括号使用没问题
#define CALL_WITH_MAX(a,b) ((a)>(b)?(a):(b))
int main()
{
int a=2;
int b=2;
int c= CALL_WITH_MAX(++a,b);
printf("%d\n",c); //c值为4
}
//建议替换 inline;
(3)宏定义函数
#define mem(a,x) memset(a,x,sizeof(a))