编译
预处理(预编译)
处理源代码中的带有#号的语句,生成编译程序可处理的文本文件;
编译过程
对每个预处理后源程序,编译并生成相应的二进制目标文件(object
文件).
此过程中,要求编译器能够识别每个标识符,知道其各自的类型、含义,但不要求知道存放位置.
链接过程
对在整个程序范围内,确定各标志符所代表的地址,如变量、函数入口,生成可执行文件.
此过程中,要求编译器能够确定每个标识符所对应的含义或地址.
Make 工具
假设一可执行文件myapp.exe
编译过程如下
link.exe, myfile01.obj, myfile02.obj, myfile88.obj → myapp.exe
cc.exe, myfile01.cpp → myfile01.obj
cc.exe, myfile02.cpp →myfile02.obj
…
cc.exe, myfile88.cpp, myfile02.h, myfile88.h → myfile88.obj
- 先取得myfile02.obj文件的时间戳(最后修改时间);
- 与
myfile02.cpp
,myfile01.h
,myfile02.h
, … ,myfile88.h
各文件的时间戳比较; - 若某个文件(如
myfile02.h
)比myfile02.obj
文件新,说明myfile02.h
有新的修改,则重新执行这行命令; - 否则略过这行命令,以便加快编译速度.
其他
入口函数
C/C++普通可执行程序(exe
)的起始函数
返回值: int
或void
, 缺省 为int
(C++1z 要求int
)
参数部分:无 或 命令行参数(int argc
,char* argv[ ]
)
//C++98标准
//appMain.cpp
#include <iostream>
using namespace std;
void main(){
}
//或 void main(int argc, char* argv[ ])
{
//…
}
//C++1z标准
//appMain.cpp
#include <iostream>
using namespace std;
int main(){
}
//或int main(int argc, char* argv[ ])