C 语言预处理器,需要在编译前对其进行处理,预处理器其实是文本替换作业。所有的预处理器命令都是以#符号开头。
一、常用预处理指令。
- #include:包含一个源代码文件;
- #define:定义宏;
- #undef:取消已定义的宏;
- #ifdef:如果宏已经定义,则返回真;
- #ifndef:如果宏没有定义,则返回真;
- #if:如果给定条件为真,则编译下面代码;
- #else:#if 的替代方案;
- #elif:如果前面的 #if 给定条件不为真,当前条件为真,则编译下面代码;
- #endif:结束一个 #if……#else 条件编译块;
- #error:当遇到标准错误时,输出错误消息;
- #pragma:使用标准化方法,向编译器发布特殊的命令到编译器中。
二、包含文件。
- #include。
#include
三、 条件编译。
- #if, #else, #elif #endif;
#include
- #ifdef, #ifndef
#include
- 常用于不同系统或版本的支持上。
/* __unix__ is usually defined by compilers targeting Unix systems */
四、#define 定义宏,#undef 取消已定义的宏。
- 定义宏,无参数。如:定义常量;
#include
- 定义宏,有参数。
带参数的宏与函数相似,但本质是完全不相同的。如下#define MAX( x, y ) ( ((x) > (y)) ? (x) : (y) ),是在出现MAX( x, y )的地方被预处理为 ( ((x) > (y)) ? (x) : (y) ),如果int x = 10, y = 20, 则被替换为 ( ((10) > (20)) ? (10) : (20) ),所以结果是20。
#include
- 取消已定义的宏。
#include
五、用户定义的编译错误与警告。
- #error 其主要的作用是在编译的时候输出编译错误信息。
#include
- #pragma 提供了编译器特定的预处理功能。
请参考:#pragma 百度百科。下面的示例中请留意编译时的输出,VS在菜单中选择“生成”->“编译”。
- #pragma message;
- #pragma code_seg;
- #pragma once;
- #pragma resource;
- #pragma resource
- #pragma warning;
- #pragma comment;
- #pragma pack。
#include
下一章,学C语言写自己的K语言:函数进阶。
让我们在这里,遇见明天的自己!姜友华