C语言预处理与标准库详解
1. 预处理概述
在C语言中,任何未被明确定义的字符都被视为一个记号(token)。不过,在预处理行里,除了空格和水平制表符之外的空白字符的影响是未定义的。预处理过程在逻辑上可分为几个连续的阶段,在特定的实现中,这些阶段可能会被合并。具体阶段如下:
1. 三元字符序列替换 :按照相关规则,将如 ??= 替换为 # 等三元字符序列替换为对应的单个字符。若操作系统环境有要求,还会在源文件的行之间插入换行符。
2. 行拼接 :删除每行末尾的反斜杠 \ 及其后的换行符,实现行的拼接。
3. 记号分割与宏展开 :程序会被分割成由空白字符分隔的记号,注释会被替换为单个空格。接着,预处理指令会被执行,宏也会被展开。
4. 转义序列替换与字符串拼接 :字符常量和字符串字面量中的转义序列会被替换为等效字符,相邻的字符串字面量会被拼接在一起。
5. 翻译与链接 :对结果进行翻译,然后收集必要的程序和数据,将外部函数和对象引用连接到它们的定义,与其他程序和库链接在一起。
2. 三元字符序列
C源程序的字符集包含在7位ASCII中,是ISO 646 - 1983不变代码集的超集。为了让程序能在简化字符集中表示,以下三元字符序列会在任何其他处理之前被替换为对应的单个字符:
| 三元字符序列 | 替换字符 |
| ---- | ---
超级会员免费看
订阅专栏 解锁全文
1712

被折叠的 条评论
为什么被折叠?



