bits/wordsize.h 《栖一夏学习笔记》了解代码预处理、编译、汇编、链接
(就是了解一下,重点看了下预处理)
一、编写两个代码
《c.c》
《.c》
二、预处理之后查看两个后缀为(.i)文件
三、查找区别
1. 前724行除c.c文件名替换成.c文件名外基本一致
2. 第725行开始,代码被替换成为main函数内容。
四、分析
1. 从预处理后的代码来看
l .c文件中条件编译已经处理,a被定义为1;
l 宏定义全部展开
l 所有注释被删除
2. 724行前均相同,为# 预编译指令处理后内容
格式为# flags
表示此后内容是从文件名为的文件中第 行展开的。
flags取值范围是1,2,3,4。可以有多个值,并用空格分开:
l 1 表示下面要展开一个新文件。相对于当前文件
l 2 表示一个文件展开完毕,返回到当前文件。
l 3 表示下面的内容来自一个系统头文件bits/wordsize.h,因此其中的警告信息应被屏蔽不输出。
l 4 表示下面的内容应被看做是以 "C" 块引入的。( "C"块的作用就是告诉C++编译器这段代码要按照C标准编译,以尽可能地保持C++与C的兼容性。)
3. 实例
# 27 "/usr//stdio.h" 3 4
3表示在该文件的第27需要展开一个系统头文件内容,4表示该文件头内容被看做是
以 "C" 块引入的
stdio.h 行显示 # < libc--start.h >
# 1 "/usr//-linux-gnu/bits/libc--start.h" 1 3 4
这就是上条所说的头文件,在此处展开了,1代表新文件
# 33 "/usr//-linux-gnu/bits/libc--start.h" 3 4
此文件第33行内容为 #
# 1 "/usr//.h" 1 3 4
承接上条所说,此处展开.h文件
# 452 "/usr//-linux-gnu/sys/cdefs.h" 3 4
425行内容是# ,下面会展开该文件
# 1 "/usr//-linux-gnu/bits/.h" 1 3 4
# 453 "/usr//-linux-gnu/sys/cdefs.h" 2 3 4
2表示在展开完毕后bits/wordsize.h,返回该文件(即cdefs.h)
4. 还会在预处理文件中出现的
l 类型重定义的都展开在预处理(被条件编译删除的不包括在内)
l 结构体也展开在预处理