| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C预处理器和C库(C语言学习笔记) -> 正文阅读 |
|
[C++知识库]C预处理器和C库(C语言学习笔记) |
1.翻译程序的第一步在处理程序之前,编译器必须对该程序进行一些翻译处理。 a.首先,编译器把源代码中出现的字符映射到源字符集。 该过程处理多个字节字符和三字序列——字符扩展让C更加国际化。 b.第二,编译器定位每个反斜杠后面跟着换行符的实例,并删除他们。 ?//例如把下面两个物理行(physical line)转换成一个逻辑行(logical line); ?printf("hello\ ? world!\n"); ?printf("hello world!\n"); 注意:在这种场合下,“换行符”的意思是通过按下Enter键在源代码文件中换行所生成的字符,而不是指符号表征\n。 由于预处理表达式的长度必须是一个逻辑单元,所以这一步为预处理做好了准备工作。一个逻辑行可以是多个物理行。 c.第三,编译器把文本划分成预处理记号序列、空白序列和注释序列(记号是由空格、制表符或换行符分隔的项,详见2.1节)。 注意:编译器将用一个空格字符替换每一条注释,而且实现可以用一个空格替换所有的空白字符序列(不包括换行符)。 d.最后,程序已经准备好进入预处理阶段,预处理查找一行中以#号开始的预处理指令。 2.明示常量:#define指令可以出现在源文件的任何地方,其定义从指令出现的地方到该文件末尾有效。 #define指令常被用来定义明示常量(mainfest constant)(也叫符号常量),但是该指令还有许多其它用途。 ?/* preproc.c -- 简单的预处理示例 */ ?#include "stdio.h" ?#define TWO 2 //可以使用注释 ?#define OW "Consistency is the last refuge of the unimagina\ ?tive. - Oscar Wilde" /* 反斜杠把定义延续到下一行 */ ?? ?#define FOUR TWO*TWO ?#define PX printf("x is %d.\n", x); ?#define FMT "X is %d.\n" ?? ?int main(void) ?{ ? ? ?int x = TWO; ? ? ? ? ? ?PX; ? ? ?x = FOUR; ? ? ?printf(FMT, x); ? ? ?printf("%s\n", OW); ? ? ?printf("TWO: OW\n"); ? ? ? ? ? ?return 0; ?} ?? 预处理器指令从#开始运行,到后面的第一个换行符为止,指令的长度仅限于一个逻辑行。 每行#define(逻辑行)都由3部分组成。
宏展开(macro expansion)
2.1记号从技术角度来看,可以把宏的替换体看作是记号(token)型字符串,而不是字符型字符串。C预处理器记号是宏定义的替换体中单独的“词”。
替换体中有多个空格时,字符型字符串和记号型字符串的处理方式不同。 ?#define EIGHT 4 * 8 如果预处理器把该替换体解释为字符型字符串,将用4 * 8替换EIGHT。即,额外的空格是替换体的一部分。如果预处理器把该替换体解释为记号型字符串,则用三个的记号4 * 8(分别由单个空格分隔)来替换EIGHT C编译器处理记号的方式比预处理器复杂。由于编译器理解C语言的规则,所以不要求代码中的空格来分隔记号。例如, C编译器可以把2*2直接视为3个记号,因为它可以识别2是常量, *是运算符。 (未完,待更新) |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 10:47:01- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |