刚看了点define的知识,自己写写回忆一下。
#define 用于宏定义,宏定义是在程序预处理阶段完成的,通常前面有#的都是在程序预处理阶段完成。
#define 通常有两种使用形式。带参数的和不带参数的形式。
第一种:不带参数的宏
例如:#define pi 3.1415926
使用宏定义可以方便我们编程。通常后面不用分号,如果有分号,在预处理阶段宏展开是会将分号一同替换,但不会报错,而在编译的时候 就会报错。
宏定义必须写在函数之外,作用范围是源程序的结尾。如果要终止其作用域,可以使用#undef命令。
第二种:带参数的宏
#define 宏名(形参名)字符串
例如:
#define M(y) ((y)*(y)+3*(y))
调用是可以: k=M(5);
这样预处理之后 k=((5)*(5)+3*(5));
通常由于同一程序容易重复包含头文件。所以为了防止重复编译,可以是用条件编译开关。例如
#ifndef _headfileXXX
文件内容
#define _headfileXXX
文件内容
#endif
刚又看到一点知识,补充上去。
#define M(x,y) x##y //这个是将x,y连接起来
#define N(x) #@x //这个是将x转换为字符
#define Q(x)#x //这是将x转换为字符串
例如:
int n=M(123,456) 结果 n =123456;
char c=N(4) 结果 c='4'
char *str=Q(456) 结果 str="456"