C程序的运行

2023-11-02

程序的翻译环境和执行环境:

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

执行环境:在这个环境中,执行代码

程序的运行过程:

1、编译和链接(翻译环境)

      我们写出的代码文件叫做源代码,这样的源代码要经过编译和链接生成可执行文件才能真正执行。对源程序进行编译,生成二进制目标文件(.obj文件);编译所得到的二进制目标文件还不能供计算机直接执行,一个程序可能包含多个源文件,而编译时针对各个源文件的,必须把所有编译得到的目标文件链接装配起来,在与函数库链接形成一个整体,生成一个可供计算机执行的程序,叫做可执行程序。


2、执行代码(执行环境)

经过上面编译链接生成的可执行程序就可以直接运行了。

详解程序的编译过程:

对一个C程序进行编译,先用C编译系统提供的“预处理器”对程序中的预处理指令进行编译预处理,生成.i文件;

test.c->test.i(gcc -E test.c -o test.i  //预处理之后停下来,结果存放在test.i文件中)

对生成的.i文件进行检查,检查它是否有语法方面的错误,如果有,发出出错信息,如果没有,进而生成.s文件;

test.i->test.s(gcc -S test.i //编译完成之后停下来,结果存放在test.s之中)

将生成的.s文件转化为二进制代码(机器语言),生成目标程序.obj

test.s->test.o(gcc -c test.s //汇编完成之后停下来,结果存放在test.o中)

在Linux环境下,尝试编译下面的代码,查看各个生成的文件:

#include <stdio.h>
int main()
{
int i = 0;
for(i=0; i<10; i++)
{
printf("%d ", i);
}
return 0;
}











本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C程序的运行 的相关文章

随机推荐

  • Rsync了解

    Rsync Rsync 实现全量及增量的本地或远程数据镜像同步备份的优秀工具 https www samba org ftp rsync rsync html 传统的cp scp 工具拷贝每次均为完整的拷贝 而rsync除了可以完整拷贝外
  • maven配置settings.xml(腾讯云)

    jdk默认版本 1 8
  • vue鼠标停留变成小手

    在style里加 cursor pointer 鼠标悬停变小手
  • 基于ISO13209(OTX)实现EOL下线序列

    一 OTX是什么 OTX 全称Open Test Sequence Exchange Format 即开放式测试序列交换格式 国际标准 ISO13209 是专为汽车行业制定的序列开发标准 在车辆诊断 自动化标定和ECU测试等领域有广泛应用
  • 牛客网刷题第三天

    HJ32 密码截取 首先确定回文串 就是找中心然后向两边扩散看是不是对称的就可以了 在遍历中心点的时候 要注意中心点有两种情况 一个元素可以作为中心点 两个元素也可以作为中心点 import java util 注意类名必须为 Main 不
  • Java 时间格式之间的相互转换(Date、Calendar、timestamp时间戳)

    存在以下6种情况 目录 1 Date gt Calendar 2 Date gt 时间戳 3 Calendar gt 时间戳 4 Calendar gt Date 5 时间戳 gt Date 6 时间戳 gt Calendar 1 Date
  • 8. F5负载均衡配置一例 (型号:BIG-LTM-1600-4G-R)

    F5 提供的解决方案保证每个用户的应用实现安全 高速和高可用 帮助企业获得最大投资回报 通过在网络中增加智能和可管理性而降低应用的负荷 F5使应用得以优化 从而提高运行速度 并降低资源消耗 此次实施的F5型号为BIG LTM 1600 4G
  • hkpic forum.php,www.bi-si2.xyz

    Domain Name BI SI2 XYZ Registry Domain ID D74084834 CNIC Registrar WHOIS Server whois godaddy com Registrar URL https ww
  • rabbitmq简单示例

    1 pom文件引入rabbitmq
  • Java Collections unmodifiableSet()方法具有什么功能呢?

    转自 Java Collections unmodifiableSet 方法具有什么功能呢 下文讲述unmodifiableSet 方法的功能简介说明 如下所示 unmodifiableSet 方法的功能 返回一个不可修改的Set视图 un
  • 灰灰快醒醒的第一篇博客

    自我介绍 哈喽哈喽大家好哇 我是来自西安邮电大学的软件工程的大一学生哦 因为对编程的喜爱 打开了CSDN的大门 很高兴与大家在此见面 我是个阳光开朗的大学生 非常愿意与各位分享编程学习的知识和经验 然后近期正在重学C语言 非常愿意在平台上分
  • JS Object.assign()方法

    作用 用于将所有可枚举属性的值从一个或多个源对象复制到目标对象 它将返回目标对象 实例 const one a 1 b 2 const two c 3 d 4 var three Object assign e 5 one two 打印结果
  • openwrt编译x86固件 VMware安装镜像

    x86 看到这里相信你们已经把镜像编译完成了 如下图所示 两个镜像 对应两个不同的文件系统 想办法把他拷贝到windows物理机上面去 你可以用U盘拷贝 还可以用ftp方式拷贝 具体方法就百度去啦 新建虚拟机 操作系统类型选择其他 一直下一
  • 如何看懂UDS诊断报文

    UDS介绍 UDS Unified Diagnostic Services 统一的诊断服务 诊断协议是ISO 15765 和ISO 14229 定义的一种汽车通用诊断协议 位于OSI模型中的应用层 它可在不同的汽车总线 例如CAN LIN
  • 未能找到服务器主机名,未能找到主机名服务器

    未能找到主机名服务器 内容精选 换一换 用户使用hostname命令查看不同镜像的裸金属服务器主机名 发现部分镜像的裸金属服务器主机名带后缀 novalocal 如示例所示 假设创建裸金属服务器时 用户自定义的主机名是abc 使用hostn
  • html的单选框和复选框

    div 性别 div
  • 安装nvidia-tensorflow时出现Preparing metadata (setup.py) ... error

    问题描述 安装nvidia tensorflow时执行语句 pip install nvidia tensorflow horovod 出现如下错误 这里的错误非常令人头疼 GitHub上nvidia官方论坛里的讨论贴也无法解决 问题原因
  • 微信小程序Invalid attempt to spread non-iterable instance解决办法

    微信小程序Invalid attempt to spread non iterable instance解决办法 原因 在js中给列表元素赋初值空 并且从缓存中取值赋给该列表元素 如 data daily 同时存在另一个数据 每次进入该页面
  • 前端vue elementUI upload上传组件封装&多文件上传&进度条,后端servlet request.getPart()接收文件信息

    vue upload组件 选中多个文件上传 通过axios请求 onUploadProgress方法监听 on progress on success用这两个钩子函数实现进度条 下面有对应的函数 本文是每个文件一个请求上传 也可以用一个请求
  • C程序的运行

    程序的翻译环境和执行环境 翻译环境 在这个环境中 源代码被转化为可执行的机器指令 执行环境 在这个环境中 执行代码 程序的运行过程 1 编译和链接 翻译环境 我们写出的代码文件叫做源代码 这样的源代码要经过编译和链接生成可执行文件才能真正执