C语言01-程序的编译、链接过程
文章目录
- 计算机体系结构概述
- 一个程序的运行过程
- 一个程序的诞生过程
- 一个程序的基本结构
计算机体系结构概述
现在计算机结构都是“冯诺依曼”结构。
- cup
- 内存
- 硬盘
这三大件,其实代表了计算机的三层架构 - cpu:计算核心,其内部有寄存器,寄存器的读写速度是最快的。存储大小是有限的:一个字节是8个位。8086是16位、两个字节的单片机
- 内存:存储量适中、读写速度适中。中间层、不用CPU去读取,将硬盘整块给内存读取
- 硬盘:存储量非常大(GB、TB),读写速度是最慢的(三者)
语言的发展
语言 类比 其他
机器码
直接可以被CPU读取,本质是16进制数字
汇编语言
机器码的助记符号,比机器码高级一点
C
面向过程的代表,以函数为最小封装单位
C++
面向对象的代表,以类为单位封装代码
JAVA
解释性语言,可以跨平台
COM
面向组件
一个程序的运行过程
点击exe程序,点击到运行,流程如下
- 点击前,exe文件,保存在:硬盘中
- 点击过程中:操作系统,将磁盘中的exe文件,给加载到内存中,并且告知CPU要读取、并执行初始位置(内存是临时情况)
- 最后,CPU读取内存中的机器码,解析并执行。
一个程序的诞生过程
.c文件.cpp文件是如何变成exe文件的
vs的自带控制台,点击“VS”
已经设置好的VS环境变量的控制台。
在这个下面完成编译、链接C源文件的过程。
在newer下新建文本文档
接着在控制台完成内容:
切换盘符:
c:
切换目录:
cd C:\newer
编译
cl /c helloworld.c
可以得到
helloworld.obj以上的cl其实就是编译器(其他的编译器还有gcc,clang)
obj里面有机器码但是没有可以执行的文件格式,里面的格式问题不正确所以不能被执行。
所以需要链接
link helloworld.obj
链接所做的事情:将多个obj文件合并成了一个exe文件(包括用户所写的obj文件(lib文件),也包括函数的obj文件)。
理解程序的编译链接过程对于之后解决问题各种实际问题,非常有帮助。举例:opencv、tensorflow。
一个程序的基本结构
#include
int main(int argc, char* argv[])
{printf("HELLO ,world\r\n");return 0;
}
stdio.h是一个文件,include找到文件,复制粘贴其中所有内容。带#号都是预前处理命令。
事实上,为了检查错误的需要,cl有对应的编译选项,将.c文件编译为:“预处理之后”,obj文件之前,也就是纯c状态。
cl /P helloworld.c
可以得到a.i文件,其中有预处理后的内容。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
