C技术文档之伪指令宏创建时间:2006-3-620:09:00作者:徐斌辉1伪指令宏宏续行符:\宏的用法:当源文件被预处理器处理时,每遇到该宏标识符,预处理器便在宏的所在处将宏扩展为宏体。简单宏定义格式:#define宏表示符号宏体例:#defineWIN_MAIN_HS0参数宏定义格式:#define宏标识符(形参0,形参1,形参2,….)宏体许多库函数是用参数宏写的。参数宏和函数的区别:1、形参表中没有类型说明符;2、参数宏在时空的开销上比函数都要小。预处理器在处理参数宏时使用两遍宏展开:1、展开宏体;2、对展开后的宏体用实参替换形式参数;例:#defineDebugNumber(x,y,value)Gotoxy(x,y,BYTE_DISPLAY);\PrintfDec(value)宏释放用于释放原定义的宏标识符。定义格式:#undef宏标识符例:#defineROW_COUNT18…..#undefROW_COUNT#defineROW_COUNT20条件宏定义先测试是否定义过某宏标识符,然后决定如何处理。定义格式:格式一:#ifdef宏标识符#undef宏标识符#define宏标识符宏体#else#define宏标识符宏体#endifC技术文档之伪指令宏创建时间:2006-3-620:09:00作者:徐斌辉2格式二:#ifndef宏标识符#define宏标识符宏体#else#undef宏标识符#define宏标识符宏体#endif例子:预定义宏预处理器的预定义宏一般有:__D-ATA__:当时的日期;__TIME__:当时的日期;__FILE__:所在文件名;__LINE__:所在文件的行数;__STDC__:当与ANCIC相兼容时,它定义宏体是1。宏体中使用转义符#和合并符##转义符#定义参数宏时,在宏体中允许将#号加于参数之前。此时的#号为预处理器的转义符。在宏扩展时将#后的参数转义为字符串。例:#definePRINTF(x)printf(#x“=%d\n”,x)在源程序中有PRINTF(Age);经预编译器扩展为printf(“Age””=%d\n”,Age);也即:printf(“Age=%d\n”,Age);合并符##在宏体内,合并符##将两边的单词合并为一个单词。合并符两边允许有任意个空格符。预处理器在处理时,将这些空格符和##一并删除,使得合并符两边的单词合并为一。例:#definePRINTF(index)printf(“Age”#index“=%d\n”,Age##index);PRINTF(2);//等价于printf(“Age2=%d”,Age2);条件编译伪指令写给编译器的,指示编译器只编译满足条件的那部分。预处理器的作用是,稍描并扩展宏,其他内容不动,留给编译器处理。定义格式:#if(条件表达式1)….#elif(条件表达式2)….#elif(条件表达式n)…#elseC技术文档之伪指令宏创建时间:2006-3-620:09:00作者:徐斌辉3….#endif条件表达式允许用宏标识符。#pragma伪指令#line伪指令