【C语言入门学习笔记】如何把C语言程序变成可执行文件!
环境
在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语言程序变成可执行文件!相关推荐
- c语言入门自学免费app,C语言入门学习最新版下载-C语言入门学习app手机版v1.0.2 安卓版-腾飞网...
C语言入门学习app手机版是一款c语言编程自学软件,零基础也可以学习,里面有海量教学视频,针对c语言不同程度的讲解都囊括其中.随时随地学习编程都可以,不用担心自己没有基础.还支持在手机上敲代码编程哦. ...
- lua语言入门学习(二)lua语言的特点及注意事项
lua语言入门学习 lua语言的特点及注意事项 文章目录 lua语言入门学习 lua语言的学习地址 一.lua语言特点 1.注释 2.全局变量和局部变量 3.lua数据类型 4.字符串类型 5.多变量 ...
- C语言入门-学习笔记(不定时更新)
一.C语言基本内容 C语言( 面向过程的语言 )的特点: 语言简洁,紧凑,使用方便,灵活 运算符丰富 数据类型丰富 具有结构化的控制语句 语法限制不太严格,程序设计自由度大. C语言允许直接访问物理地 ...
- dos 改某个目录下所有文件的时间_go语言入门学习笔记(2)-DOS操作及go语言变量学习...
API:application program interface:应用程序编程接口. 就是我们go的各个包的各个函数. 我们想要了解这些函数我们可以通过Go的中文网在线标准库文档: https:// ...
- 20220\8\20 C语言入门学习笔记_1 【试写未成年防沉迷系统模型】 (使用软件vs2022)
#include<stdio.h>int main(void)/*Fish_GD*/ {int age;int English_score;int IQ;printf("输入你 ...
- R语言入门学习笔记 - 对R软件的认识
一.R软件 1.安装R:自行百度☺ 2.R控制台(R Console)和R程序脚本: 打开R软件,就会直接打开控制台,控制台可以显示程序运行的结果.错误提示等信息,也可以直接输入想要执行的操作并立即返 ...
- 《Go语言圣经》学习笔记 第一章 Go语言入门
Go语言圣经学习笔记 第一章 Go语言入门 目录 Hello, World 命令行参数 查找重复的行 GIF动画 获取URL 并发获取多个URL Web服务 本章要点 注:学习<Go语言圣经&g ...
- lua语言入门学习(一)搭建基本的环境并实现运行
lua语言入门学习 本篇文章用来记录自己写lua语言的过程 文章目录 lua语言入门学习 前言 一.lua语言是什么? 二.使用步骤 1.搭建环境 2.开始运行 总结 前言 最近来到了一家网络游戏公司 ...
- Java快速入门学习笔记9 | Java语言中的方法
有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...
最新文章
- 插入排序,希尔排序,堆排序
- linux获取明文密码,linux下抓取内存中明文密码mimipenguin
- if语句和缩进部分是一个完整的代码块
- python 正则表达式判断字符串是否为回文_JS使用栈判断给定字符串是否是回文算法示例...
- 教师计算机提升学到的知识,教师计算机教学工作总结(精选6篇)
- 购物车catslider简单的多商品分类滑动
- 查看文件md5_了解 | Mongodb 文件存储之 GridFs
- php 图片填充图片,php imagefilledrectangle在图片画一矩形并填充
- 简述mysql实现递归查询的方法
- 【Badboy】脚本录制
- Apktool反编译
- 图像处理:语义分割(sematic segmentation)
- 接口管理工具Rap的安装
- python 作物识别_20行Python代码开发植物识别 app
- isEmpty和null区别
- oracle如何导出表结构及数据,PLSQL怎样导出oracle表结构和数据
- 1652:牡牛和牝牛
- Go mod使用指南
- 【数据可视化 第一周】解构数据可视化
- 输入字母输出姓c语言,输出英文(C语言程序?输入数字输出英文)
热门文章
- 使用Servlet和Bootstrap上传Ajax文件
- 如何将云持久存储添加到JBoss Cool Store
- gkz cloud sql_使用Cloud SQL的Google App Engine全文搜索
- 使用Java成功生成代码的7个技巧
- apache.camel_Apache Camel 2.9发布–十大变化
- rabbitmq订单模块_RabbitMQ播放模块! 构架
- Web应用程序体系结构– Spring MVC – AngularJs堆栈
- 内存不足:杀死进程或牺牲孩子
- Java 8:功能接口示例
- ADF Faces。 立即的自定义客户端事件