编程是一项复杂性的工作,解决复杂性的思想就是分治,分层抽象。
编程是一个系统性的工程,其所依托的平台也是如此。
一、程序开发平台程序开发平台也就是集成开发环境(IDE,Integrated Development Environment ),是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套件。所有具备这一特性的软件或者软件套(组)都可以叫集成开发环境。如Visual Studio、Eclipse、JBuilder、PyCharm等。
开发平台除了提供编辑器、编译器、链接器、调试器等主要工具以外,通常还提供图形界面环境,可以集成一些应用程序开发框架。这样写代码便可以利用现成的库(函数库、类库),还可以通过框架去继承一些已有的类,通过重载(如C 重载虚函数)去扩充一些功能。
标准C和C 定义了9个不同的翻译阶段。当然,实现没有必要在代码中分成9个独立的阶段,但是翻译的结果必须好像已经这样做了一样,这9个阶段是:
1 物理源字符被映射到源字符集中。其中包括三字符组合(trigraph)替换以及诸如把回车/换行映射到一个单独的MSDOS环境下的换行字符那样的东西。在C 程序中,任何不在基础源字符集中的字符都被它的通用字符名替换。
2 所有以反斜杠结束的行都和它们接下来的行合并,并且删去反斜杠(物理行转换为逻辑行)。
3 源码被分析成预处理标记,并且注释被一个单独的空字符所替换,C 双字符被识别为标记。
4 调用预处理指令并且扩展宏,对于任何被包含的文件循环地重复步骤1到4。
5 源字符退出字符常量序列,普通字符名被映射成执行字符集成员(例如,'\a'将在ASCII环境下转换成7的一个字节值)。
6 相邻的字符串被连接。
7 传统的编译:词汇和语义分析,并翻译成汇编语言或机器码。
8 执行任何待解决的模板实例(C )。
9 链接:解决外部引用,准备好程序映像以便执行。
二、程序运行平台操作系统是程序的运行平台。同一硬件平台能够运行多用户、多道程序是操作系统的功能,所以用户程序需要在操作系统的调度下运行,以便统一多个程序的资源管理。操作系统既是用户使用的界面接口,也是程序开发的接口。
如在显示屏上显示一串字符的hellowWord。
#include <stdio.h>
int main()
{
puts("hello World");
return 0;
}
编译成链接成的应用程序helloWord.exe与操作系统的交互如下:
(以下文本用OS表示操作系统(Operating System),用EF(Executable File)表示可执行文件或需要运行的程序helloWord.exe)
1 用户告知OS执行EF(点击或输入EF路径);
2 OS检索EF是否是可执行文件,并通过程序首部信息确定代码和数据在EF中的位置并计算出对应的磁盘块地址;
3 OS创建一个新的进程,并将EF映射到该进程结构,表示由该进程执行EF;
4 OS为EF设置CPU上下文环境,并跳到程序开始处;
5 OS的调度程序选中EF进程;
6 执行EF的第一条指令,发现缺页异常,OS分配一页物理内存,并将代码从磁盘读入内存,继续执行;
7 EF执行puts()函数(系统调用);
8 OS找到要将字符串送往的显示器,通常设备是由一个进程控制的,所以,OS将要写的字符串送给那个进程;
9 OS控制设备的进程告诉设备的窗口系统它要显示字符串,窗口系统确定这是一个合法的操作,然后将字符串转换成像素,将像素写入设备的存储映像区;
10 视频硬件将像素转换成显示器可接收的一组控制/数据信号;
11 显示器解释信号,激发显示屏显示字符;
-End-
,