接着上一帖:#【J.C.X】了解电源程序员1#
-------------分界线-------------------------------
为什么是 C
这里插播一则新闻,为什么我们要学 C 语言?学 Java 用不用懂 C 语言?这里需要聊聊 C 语言的发家史了
程序被其他程序翻译成不同的形式
C 语言程序成为高级语言的原因是它能够读取并理解人们的思想 。然而,为了能够在系统中运行 hello.c 程序,则各个 C 语句必须由其他程序转换为一系列低级机器语言指令 。这些指令被打包作为可执行对象程序,存储在二进制磁盘文件中 。目标程序也称为可执行目标文件 。
在 UNIX 系统中,从源文件到对象文件的转换是由编译器执行完成的 。
gcc 编译器驱动从源文件读取 hello.c,并把它翻译成一个可执行文件 hello 。这个翻译过程可用如下图来表示
上面定义的描述了一种低级语言指令 。汇编语言是非常有用的,因为它能够针对不同高级语言来提供自己的一套标准输出语言 。
编译完成之后是汇编阶段(Assembly phase),这一步,汇编器 as会把 hello.s 翻译成机器指令,把这些指令打包成可重定位的二进制程序(relocatable object program)放在 hello.c 文件中 。它包含的 17 个字节是函数 main 的指令编码,如果我们在文本编辑器中打开 hello.c 将会看到一堆乱码 。
最后一个是链接阶段(Linking phase),我们的 hello 程序会调用 printf 函数,它是 C 编译器提供的 C 标准库中的一部分 。printf 函数位于一个叫做 printf.o文件中,它是一个单独的预编译好的目标文件,而这个文件必须要和我们的 hello.o 进行链接,连接器(ld) 会处理这个合并操作 。结果是,hello 文件,它是一个可执行的目标文件(或称为可执行文件),已准备好加载到内存中并由系统执行 。
你需要理解编译系统做了什么
对于上面这种简单的 hello 程序来说,我们可以依赖编译系统(compilation system)来提供一个正确和有效的机器代码 。然而,对于我们上面讲的程序员来说,编译器有几大特征你需要知道
处理器读取、解释内存中的指令
现在,我们的 hello.c 源程序已经被解释成为了可执行的 hello 目标程序,它存储在磁盘上 。如果想要在 UNIX 操作系统中运行这个程序,我们需要在 shell 应用程序中输入
这里解释下什么是 shell,shell 其实就是一个命令解释器,它输出一个字符,等待用户输入一条命令,然后执行这个命令 。如果命令行的第一个词不是 shell 内置的命令,那么 shell 就会假设这是一个可执行文件,它会加载并运行这个可执行文件 。
这贴不够下面的知识点,开新帖
点关注不迷路
文章插图
文章插图
【了解电源程序员2】
文章插图
文章插图
文章插图
文章插图
推荐阅读
- 删除打开方式里不需要的选项
- 显示器黑屏故障分析
- Win7电脑工具栏怎么调整?
- Win7宽带自动连接器制作图解
- 显示器引起的鼠标失灵
- 谷歌pixel手机使用电信卡设置教程,无需bl解锁
- 纳税等级评定标准评级B 纳税信用b级纳税名单如何评,纳税信用等级评定分几级
- 个税系统怎么添加新企业 北京地税个税如何增加企业信息,个税如何增加扣缴单位
- 网上申报税务 合肥如何申请网上申报纳税,电子税务局网上申报流程