文档章节

第16章 C预处理器和C库 16.1 翻译程序的第一步

idreamo
 idreamo
发布于 2017/06/30 06:17
字数 410
阅读 36
收藏 1

对程序作预处理以前,编译器会对它进行几次翻译处理。编译器首先把源代码中出现的字符映射到源字符集。该过程处理多字节字符和使C外观更加国际化的三元字符(rtigraph)扩展。

第二,编译器查找反斜线后紧跟换行符的实例,并删除这些实例。也就说,将类似下面的两个物理行:

printf("That's wond\
erful!\n");

转换成一个逻辑行:

printf("That's wonderful!\n");

注意,在这种场合下,“换行符”代表按下回车键在源代码文件中新起一行所产生的字符,而不是符号\n代表的字符。

因为预处理表达式的长度为一逻辑行,所以这个功能为预处理做好了准备工作。而一个逻辑行可能会比一个物理行多。

接下来,编译器将文本划分成预处理的语言符号(token)序列空白字符注释序列(术语语言符号代表由空格分隔的组)。应注意的一点是编译器用一个空格字符代替每一个注释。因此,像下面的语句:

int /*这不是个空格*/ fox;

将变成:

int fox;

C实现可能还会选用单个空格代替每一个空白字符(不包括换行符)序列最后,程序进入预处理阶段。预处理器寻找可能存在的预处理指令。这些指令由一行开始处的#符号标识。

© 著作权归作者所有

idreamo
粉丝 18
博文 139
码字总数 224743
作品 0
青岛
产品经理
私信 提问
C Primer Plus 第11章 11.7 ctype.h字符函数和字符串

第7章“C控制语句 分支和跳转”介绍了ctype.h系列字符相关的函数。这些函数不能被 应用于整个字符串,但是可以被应用于字符串中的个别字符。程序清单11.26定义了一个函数,它把toupper( )函数...

idreamo
2016/08/27
29
0
[编程语言]C陷阱与缺陷

内容摘要 作者以自己1985年在Bell实验室时发表的一篇论文为基础,结合自己的工作经验扩展成为这本对C程序员具有珍贵价值的经典著作。写作本书的出发点不是要批判C语言,而是要帮助C程序员绕过...

21gprs
2014/05/23
0
0
#define 中的“ # 运算符”和“ ## 运算符”

利用宏参数创建字符串:# 运算符 在类函数宏(function-like macro)的替换部分中,“#”符号用作一个预处理运算符,它可以把语言符号(token)转化为字符串。例如,如果 x 是一个宏参量,那...

TMDJoJo
2012/07/07
0
0
C/C++程序编译流程(预处理->编译->汇编->链接)

程序的基本流程如图: 1. 预处理 预处理相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件...

oldpan
2017/09/10
0
0
通过这 9 本开源好书学习 C 语言

本文由伯乐在线 -艾凌风 翻译。未经许可,禁止转载! 英文出处: Steve Emms。欢迎加入 翻译组。 书是非常私人的东西,编程类书籍也不例外。我们都是通过阅读书籍来帮助掌握某种语言的基本知...

伯乐在线
2017/02/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

优雅的关闭Spring Boot

优雅的关闭Spring Boot 1、实现 TomcatConnectorCustomizer 接口拿到Tomcat的连接获取 Tomcat连接池 2、实现 ApplicationListener<ContextClosedEvent> 监听服务器关闭事件,注册JVM钩子函数...

sowhat
今天
2
0
Python3-Web开发

简介 Web开发框架 什么是Web框架? Web应用程序框架或简单的Web框架表示一组库和模块,使Web应用程序开发人员能够编写应用程序,而不必担心协议,线程管理等低级细节。 virtualenv是一个虚拟...

wuxinshui
今天
3
0
使用技媒体实践编写发布博客

技媒体实践博客 CSDN OSChina 知乎 简书 思否 掘金 51CTO

晨猫
今天
2
0
Lucene

1、什么是全文检索 数据分类 我们生活中的数据总体分为两种:结构化数据和非结构化数据。 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。 非结构化数据:指不定长或无固...

榴莲黑芝麻糊
昨天
5
0
python到setuptools、pip工具的安装

python安装 基础开发库   apt-get install gcc  apt-get install openssl libssl-dev 安装数据库和开发库   apt-get install mysql-server libmysqld-dev python环境   下载地址...

问题终结者
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部