头文件的相互包含: 假如a.h包含了b.h的内容,而b.h中又包含了a.h的内容,这时就会产生头文件的相互包含,无法编译通过 解决方案:把a.h中需要b.h的内容,和b.h中需要a.h的内容提取出来,额外再写另一个c.h
1 基本原则 1.1 基本原则 (1)保持代码的简明清晰,避免过分的编程技巧 (2)尽量遵循ANSI C标准,尽量不用编译器扩展功能 (3)首先是正确性,可维护性其次考虑性能 (4)保持一致性,尽可能多的使用相同规则 (5)尽量避免全局变量,尽量避免goto语句 2 布局
首先是将源代码文件hello.c和相关的头文件,如stdio.h等被编译器Cpp预编译成一个.i文件。主要处理那些源文件中以“#”开始的预编译指令,如“#include"、”#define“等,主要规则如下: •宏定义展开:将所有的”#define“删除,并且展开所有的宏定义; •处理所有条件预编译指令,比如”#if”、”#ifdef“、”#e...
5、添加行号和文件标识,如#2 “hello.c” 2,以便于编译时编译器产生调试用的行号信息及用于编译时产生编译错误或警告时能够显示行号信息; 6、保留所有的#pragma编译器指令,因为编译器须要使用它们; 二、编译 编译过程通过词法和语法分析,确认所有指令符合语法规则(否则报编译错),之后翻译成对应的中间码,在linux中...
示例:如果a.h不是自包含的,需要包含b.h才能编译,会带来的危害:每个使用a.h头文件的.c文件,为了让引入的a.h的内容编译通过,都要包含额外的头文件b.h。额外的头文件b.h必须在a.h之前进行包含,这在包含顺序上产生了依赖。 注意:该规则需要与“.c/.h文件禁止包含用不到的头文件”规则一起使用,不能为了让...
(1) 编译 中的操作 编译 步骤中的操作 : 1.词法分析 : 分析 关键字, 标识符, 立即数 的合法性; 2.语法分析 : 检查 代码 是否遵循 C 语言语法规则; 3.语义分析 : 分析表达式是否合法; 编译 需要的指令 : gcc -S test_1.c -o test_1.s ;...
比如:#include,#define,处理的规则如下: 将所有的#define删除,并展开所有的宏定义。 处理所有的条件编译指令,如: #if、#ifdef、#elif、#else、#endif 。 处理#include预编译指令,将包含的头文件的内容插入到该预编译指令的位置。这个过程是递归进行的,也就是说被包含的头文也可能包含其他文件。
编译、优化 第二个阶段编译、优化阶段,经过预编译得到的输出文件中,只有常量;如数字、字符串、变量的定义,以及c语言的关键字,如main,if,else,for,while,{,}, +,-,*,\等等。 编译程序所要做的工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。
d:\project\src\test.h