1、#define的简单定义作用
#define相当于一个简单的文本替换,对于普通的常量定义,我就不必多说了,但是对于类似于函数定义的形式,可能会出现错误,例如:
#define Add(x,y) x+y
用到代码中时会出现问题,比如计算式子c*Add(x,y)*d,本意是计算出x与y的和之后在分别与c,d做乘积,可是因为#define仅仅相当于一个简单的文本替换,所以真实的计算是c*x + y*d;这样的话就出现错误了!
2、#define可以进行多行代码的定义,只需要在每行的末尾加上"\"符号即可,例如:
#define MACRO(arg1, arg2) do { \
\
stmt1; \
stmt2; \
\
} while(0)
3、用#define实现条件编译,在大型的项目之中,需要通过条件编译来选择不同的编译环境,例如:
#ifdef WINDOWS
......
......
#endif
#ifdef LINUX
......
......
#endif
可以在编译的时候通过#define设置编译环境
4、如何定义宏、取消宏
//定义宏
#define [MacroName] [MacroValue]
//取消宏
#undef [MacroName]
普通宏
#define PI (3.1415926)
带参数的宏
#define max(a,b) ((a)> (b)? (a),(b))
关键是十分容易产生错误,包括机器和人理解上的差异等等。
5、条件编译
#ifdef XXX…(#else) …#endif
例如 #ifdef DV22_AUX_INPUT
#define AUX_MODE 3
#else
#define AUY_MODE 3
#endif
#ifndef XXX … (#else) … #endif
6、头文件(.h)可以被头文件或C文件包含;
重复包含(重复定义)
由于头文件包含可以嵌套,那么C文件就有可能包含多次同一个头文件,就可能出现重复定义的问题的。
通过条件编译开关来避免重复包含(重复定义)
例如
#ifndef __headerfileXXX__
#define __headerfileXXX__
…
文件内容
…
#endif