1. 翻译阶段由几个步骤组成
编译过程本身也由几个阶段组成,首先是预处理器处理,在这个阶段,预处理器在源代码上执行一些文本操作。例如,用实际值代替由#define指令定义的符号以及读入由#define指令包含的文件的内容。
然后,源代码经过解析(parse),判断它的语句的意思。第二个阶段是产生绝大多数错误和警告信息的地方。随后便产生目标代码。
图1 编译过程
使用‘-o name ’ ,它可以使连接器把可执行程序保存在‘name’文件中,而不是‘a.out’。在缺省情况下,链接器在标准C函数库中查找,如果在编译时加上‘-lname’标志,链接器就会同时在‘name’的函数库中进行查找。
在执行程序过程中,在绝大多数机器里,程序将使用一个运行时堆栈(stack),它用于对存储函数的局不变量和返回地址。
一个ANSI C程序由声明和函数组成。函数定义了需要执行的工作,而声明则表述了函数和(或)函数将要操作的数据类型。
C语言中的关键字:
autodogotosignedunsigned
breakdoubleifsizeofvoid
caseelseintstaticvolatile
charenumlong structwhile
constexternregisterswitch
continuefloatreturn typedef
defaultforshort union
1. 在结构体中,每个成员依次存储,而在联合中,所有的成员都从偏移地址零开始存储。这样每个成员的位置都重叠在一起,在某一时刻,只有一个成员真正存储于该地址。
2. 枚举(enum)通过一种简单的途径,把一串名字与一串整数值联系在一起。
3. 用优先级规则分析C语言声明一例:
char * const *(*next)();
把上述分析结果加以慨括,这个声明表示“next是一个指针,它指向一个函数,该函数返回另一个指针,该指针指向一个类型为char的常量指针”