环境

在ANSI的任何一种实现中,存在两种不同的环境。

翻译环境:在这个环境里,源代码被转换为可执行的机器指令。

执行环境:用于实际执行代码。

翻译环境

组成一个程序的每个源文件通过编译过程分别转成目标代码

各个目标文件由链接器捆绑在一起,形成一个单一而完整的可执行程序。

链接器同时也会引入标准c函数库中的任何被改程序所用到的函数。

过程如下图所示

实际上,翻译环境本身也有几个阶段组成:

编译

预编译阶段:在这个阶段主要进行一些文本操作,如处理预处理指令,删除注释,#define宏替换,条件编译。

我们可以在linux平台下测试一下,在这个阶段会产生一个.i文件。

首先写一个简单的程序,比如hello world,保存为test.c文件。

使用如下代码:

gcc -E test.c -o test.i

此时会出现一个test.i文件,vim打开可以观察到里面的代码已经不再是原来的hello world了,这一步会将#include包含的文件全部复制过来。

编译阶段

主要对代码进行解析,分析出语法错误词法错误,并且符号汇总。这一阶段完成后会形成.s文件,并且将c代码转成汇编语言。

使用如下代码:

gcc -S test.i -o test.s

打开可以观察到:都是汇编代码。

汇编阶段

在这一阶段,会形成符号表。并且将汇编代码转换成机器指令,二进制序列。

使用如下代码

gcc -c test.s -o test.o

打开可以看到,全部都是一些我们看不懂的东西,其实就是二进制序列。

链接

链接这一阶段主要是合并段表,合并符号表和对符号表的重定位。

编译阶段结束后,会生成一个a.out的文件,这个就是我们说的可执行程序,中间产生的.i .s .o文件会被自动删除(可使用代码保留)。

./a.out

此时可以看到屏幕上已经打印了hello world了。

执行环境

首先,程序必须载入内存,这个任务由操作系统完成。在独立环境中,必须手工安排,比如通过把可执行代码置入只读内存(ROM)来完成。

接着,调用main函数。

执行程序代码,程序将使用一个运行时堆栈,用于存储函数的局部变量和返回地址,程序同时也可以使用静态内存,存储于静态内存中的变量在整个执行过程中将一直保留他们的值。

终止程序。可以是正常终止,也可能是出现错误自行中断。

来源于网络,如有侵权,告知必删。

【C语言入门学习笔记】如何把C语言程序变成可执行文件!相关推荐

  1. c语言入门自学免费app,C语言入门学习最新版下载-C语言入门学习app手机版v1.0.2 安卓版-腾飞网...

    C语言入门学习app手机版是一款c语言编程自学软件,零基础也可以学习,里面有海量教学视频,针对c语言不同程度的讲解都囊括其中.随时随地学习编程都可以,不用担心自己没有基础.还支持在手机上敲代码编程哦. ...

  2. lua语言入门学习(二)lua语言的特点及注意事项

    lua语言入门学习 lua语言的特点及注意事项 文章目录 lua语言入门学习 lua语言的学习地址 一.lua语言特点 1.注释 2.全局变量和局部变量 3.lua数据类型 4.字符串类型 5.多变量 ...

  3. C语言入门-学习笔记(不定时更新)

    一.C语言基本内容 C语言( 面向过程的语言 )的特点: 语言简洁,紧凑,使用方便,灵活 运算符丰富 数据类型丰富 具有结构化的控制语句 语法限制不太严格,程序设计自由度大. C语言允许直接访问物理地 ...

  4. dos 改某个目录下所有文件的时间_go语言入门学习笔记(2)-DOS操作及go语言变量学习...

    API:application program interface:应用程序编程接口. 就是我们go的各个包的各个函数. 我们想要了解这些函数我们可以通过Go的中文网在线标准库文档: https:// ...

  5. 20220\8\20 C语言入门学习笔记_1 【试写未成年防沉迷系统模型】 (使用软件vs2022)

    ​#include<stdio.h>int main(void)/*Fish_GD*/ {int age;int English_score;int IQ;printf("输入你 ...

  6. R语言入门学习笔记 - 对R软件的认识

    一.R软件 1.安装R:自行百度☺ 2.R控制台(R Console)和R程序脚本: 打开R软件,就会直接打开控制台,控制台可以显示程序运行的结果.错误提示等信息,也可以直接输入想要执行的操作并立即返 ...

  7. 《Go语言圣经》学习笔记 第一章 Go语言入门

    Go语言圣经学习笔记 第一章 Go语言入门 目录 Hello, World 命令行参数 查找重复的行 GIF动画 获取URL 并发获取多个URL Web服务 本章要点 注:学习<Go语言圣经&g ...

  8. lua语言入门学习(一)搭建基本的环境并实现运行

    lua语言入门学习 本篇文章用来记录自己写lua语言的过程 文章目录 lua语言入门学习 前言 一.lua语言是什么? 二.使用步骤 1.搭建环境 2.开始运行 总结 前言 最近来到了一家网络游戏公司 ...

  9. Java快速入门学习笔记9 | Java语言中的方法

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

最新文章

  1. 插入排序,希尔排序,堆排序
  2. linux获取明文密码,linux下抓取内存中明文密码mimipenguin
  3. if语句和缩进部分是一个完整的代码块
  4. python 正则表达式判断字符串是否为回文_JS使用栈判断给定字符串是否是回文算法示例...
  5. 教师计算机提升学到的知识,教师计算机教学工作总结(精选6篇)
  6. 购物车catslider简单的多商品分类滑动
  7. 查看文件md5_了解 | Mongodb 文件存储之 GridFs
  8. php 图片填充图片,php imagefilledrectangle在图片画一矩形并填充
  9. 简述mysql实现递归查询的方法
  10. 【Badboy】脚本录制
  11. Apktool反编译
  12. 图像处理:语义分割(sematic segmentation)
  13. 接口管理工具Rap的安装
  14. python 作物识别_20行Python代码开发植物识别 app
  15. isEmpty和null区别
  16. oracle如何导出表结构及数据,PLSQL怎样导出oracle表结构和数据
  17. 1652:牡牛和牝牛
  18. Go mod使用指南
  19. 【数据可视化 第一周】解构数据可视化
  20. 输入字母输出姓c语言,输出英文(C语言程序?输入数字输出英文)

热门文章

  1. 使用Servlet和Bootstrap上传Ajax文件
  2. 如何将云持久存储添加到JBoss Cool Store
  3. gkz cloud sql_使用Cloud SQL的Google App Engine全文搜索
  4. 使用Java成功生成代码的7个技巧
  5. apache.camel_Apache Camel 2.9发布–十大变化
  6. rabbitmq订单模块_RabbitMQ播放模块! 构架
  7. Web应用程序体系结构– Spring MVC – AngularJs堆栈
  8. 内存不足:杀死进程或牺牲孩子
  9. Java 8:功能接口示例
  10. ADF Faces。 立即的自定义客户端事件