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文件,其中有预处理后的内容。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部