- 10
- 0
- 约1.03万字
- 约 9页
- 2017-09-05 发布于贵州
- 举报
在将一个C源程序转换为可执行程序的过程中, 编译预处理是最初的步骤. 这一步骤是由预处理器(preprocessor)来完成的. 在源流程序被编译器处理之前, 预处理器首先对源程序中的宏(macro)进行处理.
C初学者可能对预处理器没什么概念, 这是情有可原的: 一般的C编译器都将预处理, 汇编, 编译, 连接过程集成到一起了. 编译预处理往往在后台运行. 在有的C编译器中, 这些过程统统由一个单独的程序来完成, 编译的不同阶段实现这些不同的功能. 可以指定相应的命令选项来执行这些功能. 有的C编译器使用分别的程序来完成这些步骤. 可单独调用这些程序来完成. 在gcc中, 进行编译预处理的程序被称为CPP, 它的可执行文件名为cpp.
编译预处理命令的语法与C语言的语法是完全独立的. 比如: 你可以将一个宏扩展为与C语法格格不入的内容, 但该内容与后面的语句结合在一个若能生成合法的C语句, 也是可以正确编译的.
(一) 预处理命令简介
--------------------------------------------------------------------------------预处理命令由#(hash字符)开头, 它独占一行, #之前只能是空白符. 以#开头的语句就是预处理命令, 不以#开头的语句为C中的代码行. 常用的预处理命令如下:
#define????????????? 定义一个预处理宏#undef???????????? 取消宏的定义
#include??????????? 包含文件命令#include_next?? 与#include相似, 但它有着特殊的用途
#if????????????????????? 编译预处理中的条件命令, 相当于C语法中的if语句#ifdef??????????????? 判断某个宏是否被定义, 若已定义, 执行随后的语句#ifndef???????????? 与#ifdef相反, 判断某个宏是否未被定义#elif????????????????? 若#if, #ifdef, #ifndef或前面的#elif条件不满足, 则执行#elif之后的语句, 相当于C语法中的else-if#else??????????????? 与#if, #ifdef, #ifndef对应, 若这些条件不满足, 则执行#else之后的语句, 相当于C语法中的else#endif????????????? #if, #ifdef, #ifndef这些条件命令的结束标志.defined????????? 与#if, #elif配合使用, 判断某个宏是否被定义
#line??????????????? 标志该语句所在的行号#????????????????????? 将宏参数替代为以参数值为内容的字符窜常量##?????????????????? 将两个相邻的标记(token)连接为一个单独的标记#pragma?????? 说明编译器信息
#warning?????? 显示编译警告信息#error????????? 显示编译错误信息
(二) 预处理的文法
--------------------------------------------------------------------------------预处理并不分析整个源代码文件, 它只是将源代码分割成一些标记(token), 识别语句中哪些是C语句, 哪些是预处理语句. 预处理器能够识别C标记, 文件名, 空白符, 文件结尾标志.
预处理语句格式:??? #command name(...) token(s)
1, command预处理命令的名称, 它之前以#开头, #之后紧随预处理命令, 标准C允许#两边可以有空白符, 但比较老的编译器可能不允许这样. 若某行中只包含#(以及空白符), 那么在标准C中该行被理解为空白. 整个预处理语句之后只能有空白符或者注释, 不能有其它内容.2, name代表宏名称, 它可带参数. 参数可以是可变参数列表(C99).3, 语句中可以利用\来换行.
e.g.# define ONE 1 /* ONE == 1 */等价于: #define ONE 1
#define err(flag, msg) if(flag) \?? printf(msg)等价于: #define err(flag, msg) if(flag) printf(msg)
(三) 预处理命令详述
--------------------------------------------------------------------------------1, #define#d
您可能关注的文档
- 硬盘分区和格式化工具(Partition Magic)使用说明.doc
- “门面”是做好,还是买好.doc
- “学创购书网”DB设计.doc
- “学创购书网”设计文档.doc
- 《科学导报》征稿函.doc
- 《网络导报·在线教育》征稿函.doc
- 《有限元方法》实训教学大纲.doc
- 【搭配课堂】★短裙已Out★_美腿长裙甜美混搭街头大热.doc
- 【搭配课堂】麻豆冠军姗姗关于长裙的搭配.doc
- 【恋物达人集中营】波西米亚长裙控啦.doc
- 2025-2026学年天津市和平区高三(上)期末数学试卷(含解析).pdf
- 2025-2026学年云南省楚雄州高三(上)期末数学试卷(含答案).pdf
- 2025-2026学年甘肃省天水市张家川实验中学高三(上)期末数学试卷(含答案).docx
- 2025-2026学年福建省厦门市松柏中学高二(上)期末数学试卷(含答案).docx
- 2025-2026学年广西钦州市高一(上)期末物理试卷(含答案).docx
- 2025-2026学年河北省邯郸市临漳县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省石家庄二十三中七年级(上)期末历史试卷(含答案).docx
- 2025-2026学年海南省五指山市九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省唐山市玉田县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省邢台市市区九年级(上)期末化学试卷(含答案).docx
原创力文档

文档评论(0)