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

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

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

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

转换成一个逻辑行:

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

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

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

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

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

将变成:

int fox;

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

转载于:https://my.oschina.net/idreamo/blog/1079058

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值