任何一种计算机语言都要从某种人们容易理解的形式(源代码)转化为计算机能执行的形式,通常,翻译器分为两类:解释器和编译器。这里只说编译器。
编译之前先要进行预处理,之后编译过程分为两遍。
预处理:用程序员定义好的模式代替源代码中的模式。
编译第一遍:对预处理过的进行语法分析。
编译第二遍:由代码生成器编译语法分析树,生成目标模块(一个以.o或.obj为扩展名的文件)。
连接器把一组目标模块连接成为一个可执行程序。
声明和定义:
声明是向编译器介绍名字——标识符。它告诉编译器“这个函数或这个变量在某处可找到,它的模样像什么”。而定义是说“在这里建立变量”或“在这里建立函数”,它为名字分配空间。用extern表示一个变量的声明但不定义它。
对于不带参数的函数:
比如:int func1();
对于C来说,他表示可带任意参数的函数, 对于C++来说,表示不带参数的函数。
头文件:
更现代的c++风格的c头文件:#include <cstdio>
新式的包含格式为:#include <iostream>, 老式的:#include <iostream.h>,老式的是非非模板化的版本。如果在同一程序中混用,有可能会出问题。
连接:
如果连接器在目标模块中找不到函数或变量的定义,它将去查找库。库有多重索引方式,连接器不必到库里查找所有目标模块----而只需要浏览索引。当连接器在库中找到定义后,就将整个目标模块而不仅仅是函数定义连接到可执行程序。注意:仅仅是库中包含所需定义的目标模块加入连接,而不是整个库参加连接。(否则库会变得毫无意义的庞大)。
如果想尽量减少程序的长度,当构造自己的库时,可以考虑一个源代码文件只放一个函数。
标准函数:
除了标准C/C++之外,还有POSIX标准,该标准是基于UNIX的一个标准,如果要用到多线程编程,最好用POSIX标准,这样代码容易理解、端口通信和维护(POSIX线程库通常只用到操作系统提供的基本的线程设施)
标准c++中常用的类:
string类、输入输出流(比如cin、cout、文件读ifstream、文件写ofstream)、容器类。