常用预处理命令及解释
#define 定义一个预处理宏
#define 标识符 字符串
#define NUM//这种也有意义
#define 宏名(形参表) 字符串
#undef 取消宏的定义
#if 编译预处理中的条件命令,相当于C语法中的if语句 #if 常量
...程序段1...
#else
...程序段2...
#endif
这里表示,如果常量为真(非0,随便什么数字,只要不是0),就执行程序段1,否则执行程序段2。
#ifdef 判断某个宏是否被定义,若已定义,执行随后的语句 #ifdef _XXXX
...程序段1...
#else
...程序段2...
#endif
这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。
#ifndef 与#ifdef相反,判断某个宏是否未被定义 #ifndef _XXXX
...程序段1...
#else
...程序段2...
#endif
这里使用了#ifndef,表示的是if not def。当然是和#ifdef相反的状况(如果没有定义了标识符_XXXX,那么执行程序段1,否则执行程序段2)
#elif 若#if, #ifdef, #ifndef或前面的#elif条件不满足,则执行#elif之后的语句,相当于C语法中的else-if
#if xxx
yyy
#elif xx
yy
#else 与#if, #ifdef, #ifndef对应, 若这些条件不满足,则执行#else之后的语句,相当于C语法中的else
#if xxx
yyy
#else
yy
#endif #if, #ifdef, #ifndef这些条件命令的结束标志
defined 宏函数, 常与#if, #elif配合使用,判断某个宏是否被定义
#if defined a #undef a
#define a 200
#endif
上述语句检验a是否被定义,如果被定义,则用#undef语句解除定义,并重新定义a为200
#error 多为编译器在预处理遇到错误时调用,也可手动输入 指令让预处理器发出一条错误信息,并且会中断编译过程。
#pragma pack 我们可以利用#pragma pack来改变编译器的对齐方式:指定对齐有什么用呢,大概就是可以避免了移植过程中编译器的差异带来的代码隐患吧。比如两个编译器的默认对齐方式不一样,那可能会带来一些bug。
#pragma pack(n) /* 下面代码指定按n字节对齐 */
。。。
#pragma pack() /* 取消自定义字节对齐 */
#pragma message 该指令用于在预处理过程中输出一些有用的提示信息
## 把俩个字符串粘在一起
# 运算符,它可以把语言符号转化为字符串。