computer:c:tips:preprocessor
这是本文档旧的修订版!
预处理概览(Preprocessor)
基本定义
预处理指令以#开头,标准C允许#的前后可以有空白字符,但旧的编译器可能不允许这么做。
如果一行中只有#一个非空白字符,标准C当作空白行处理。
在标准C中,预处理行在宏扩展(macro expansion)之前识别。所以,如果宏的扩展结果是预处理指令,则这条指令将不会被预处理器发现。如:
#define GETIO #include <stdio.h> GETIO int main(void) { printf("hello, world!\n"); }
这可不等于经典的“hello, world”程序。经过预处理后,“#include <stdio.h>”仍旧在C源程序中(就好像没经过预处理一样),传递给编译器,从而编译时出错!
在词法(Lexical)部分提到过:预处理指令可以用\续行,注释中间的行结束符也不会中断预处理指令。
宏在注释、字符常量、字符串常量和#include中的文件名里不会被识别。
预处理命令列表
#define | 定义宏 |
#undef | 取消宏定义 |
#include | 包含头文件 |
#if | 条件编译 |
#ifdef | |
#ifndef | |
#elif | |
#else | |
#endif | |
#line | 显式设定宏__LINE__和__FILE__ |
defined | 宏(参数)定义返回1,否则返回0 |
#operator | 参数字符串化 |
##operator | 符号合并 |
#pragma | 设定依赖于实现的编译指示 |
#error | 产生一个编译错误 |
computer/c/tips/preprocessor.1409912280.txt.gz · 最后更改: 2014/11/01 02:02 (外部编辑)