1、#define:
1)、#typedef 和#define 的区别
typedef int * int_ptr1;
#define int_ptr2 int *
作用都是用 int_ptr 代表 int * ,但是二者不同,正如前面所说 ,#define 在预处理 时进
行简单的替换,而 typedef 不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类
型。也就是说:
int_ptr1 a, b; //相当于 int * a, b; 只是简单的宏替换
int_ptr2 a,b //都指向 int 型
2)、#ifndef A #define A {...} #endif
避免重复引用头文件
3)do {...}while(0)
如果需要定义这样一个宏:
#define DOSOMETHING()\
foo1();\
foo2();
这个宏的本意是,当调用 DOSOMETHING()时,函数 foo1()和 foo2()都会被调用。但是
如果你在调用的时候这么写:
if(a>0)
DOSOMETHING();
因为宏在预处理的时候会直接被展开,你实际上写的代码是这个样子的:
if(a>0)
foo1();
foo2();
如果仅仅使用{}将 foo1 和 foo2 包裹起来,展开后如下:
if(a>0)
{
foo1();
foo2();
}; //这是错的
所以,很多人才采用了 do{...}while(0);
#define DOSOMETHING() \
do{ \
foo1();\
foo2();\
}while(0)\
展开后得到:
if(a>0)
{
foo1();
foo2();
}