3.C程序编译步骤

目录

1  预处理

2  编译

3  汇编

4  链接

5  文件大小情况


依次执行下面4个步骤

  1. 预处理
    • 将所有头文件展开,比如stdio.h等,展开就相当于把stdio.h中的所有代码粘贴到你的代码里。
    • 将所有的宏文件展开,像stdio.h是官方定义的头文件,宏文件可以理解为自定义的头文件
    • 进行条件编译,比如:获取编译环境信息,比如当前是什么系统,系统位数是多少。再比如获取编译成exe的名字
    • 将代码中的注释删掉
    • 在预处理阶段不会检查语法
  2. 编译:
    • 检查语法,检查没问题后将预处理后的文件生成汇编文件
  3. 汇编
    • 将汇编文件生成目标文件(二进制文件)
  4. 链接
    • .h文件也是高级语言,它有一些在上述过程中无法转换为二进制,在这一步会将目标文件与一些必要的库链接起来,最终生成一个二进制文件
    • 如果你用了头文件的函数但并没有导入头文件会在这一步报错而不是编译时报错

我们可以使用gcc进行分步编译

1  预处理

helloworld.c文件是这样的

通过预处理 由.c文件得到.i文件

用记事本打开helloworld.i,首先可以发现头文件被展开了

拉到最下面发现之前的注释消失了

2  编译

由 .i 文件得到 .s文件

用记事本打开helloworld.s发现里面变为了汇编语言,汇编语言中别的不一定认识,这个movl只要接触过汇编语言的应该有所了解

  • 这里的汇编格式是GCC的格式,所以和我们自己写的汇编不是很一样,有的地方会啰嗦些

3  汇编

由 .s 文件得到 .o文件

记事本的默认编码方式应该是utf-8,.o文件是二进制文件,你用记事本打开就乱码了

二进制是人类看不懂的,如果你想打开你可以用python下面的代码打开它 

with open('E:\\笔记\\C语言笔记\\代码\\3.C程序编译步骤\\helloworld.o','rb') as f:
    print(f.read())

4  链接

由.o文件得到exe文件

  • 写不写最后的exe都会给你搞出一个exe来

关于链接的库,实际上就是dll文件,你可以用 dependcy walker.exe 来查看链接库的情况,首先到官网进行下载 Dependency Walker (depends.exe) Home Page

我当前系统是win10,我下载的是这个

下载后得到一个压缩包,压缩包解压后会得到下面三个文件

双击打开exe后,先点击options然后点击Configure Module Search Order。这个是设置从哪里找。我们需要限制寻找的范围,不然depends.exe会未响应

会从右边找库,移动到左边表示不从那里找。比如我现在将PATH移动到左边,就表明不从PATH中找库了

移动完毕之后是这样的

如果你还想添加路径,那就点Browse,然后找到你要添加的路径,之后点击Add Directory

确定后点击OK

之后点击OK关闭窗口,然后把需要看链接的exe拖到Dependency Walker就可以看到链接的情况了

5  文件大小情况

在.i文件中由于把头文件展开了,它里面放的内容多,所以文件比.c文件大了很多。exe最大

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/217708.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Batch Normalization

1.是什么? 批量归一化(Batch Normalization),由Google于2015年提出,是近年来深度学习(DL)领域最重要的进步之一。该方法依靠两次连续的线性变换,希望转化后的数值满足一定的特性&am…

Python 解析JSON实现主机管理

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它以易于阅读和编写的文本形式表示数据。JSON 是一种独立于编程语言的数据格式,因此在不同的编程语言中都有对应的解析器和生成器。JSON 格式的设计目标是易于理解、…

应用分发平台的重要性:构建、扩展和管理您的移动应用

在当今的数字时代,移动应用已经成为我们日常生活的一部分。无论是用于商业、教育、娱乐还是社交,应用都在我们的生活中发挥着重要的作用。然而,构建一个成功的应用需要更多的工作——它需要一个合适的平台来发布、管理和跟踪。这就是应用分发…

JFrog----软件的SBOM分析简介

文章目录 什么是SBOM?SBOM分析的重要性SBOM分析的过程结语 什么是SBOM? SBOM,全称是“软件物料清单”,它像是一个详尽的清单,列出了构成特定软件的所有组件,包括库、模块、包等。这就像是制造业中的物料清…

为什么要做ERP集成?ERP系统如何与其他业务应用程序集成

什么是ERP集成? ERP集成是指将企业资源计划(Enterprise Resource Planning,ERP)系统与其他软件应用或业务流程进行无缝连接和整合的过程。 ERP系统通常涵盖企业内部的各种功能模块,如财务、供应链管理、生产制造、销…

制作一个RISC-V的操作系统-环境搭建

文章目录 前言环境搭配 前言 由于之前的操作系统反馈难度太大,所以准备从这个RISC-V操作系统出发,以后知识层面更加深入再去完善。 环境搭配 按照依赖项 $ sudo apt update $ sudo apt install build-essential gcc make perl dkms git gcc-riscv64-…

Python标准库:copy模块【侯小啾python基础领航计划 系列(十五)】

Python标准库:copy模块【侯小啾python基础领航计划 系列(十五)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ…

Educational Codeforces Round 159 (Rated for Div. 2)(B 二分贪心 Cgcd D二分+前缀和 E字典树)

A - Binary Imbalance 有只要在01之间插入就能制造无限个0&#xff0c;没有0就统计0 1个数即可 #include<bits/stdc.h> using namespace std; const int N 110010,mod998244353; #define int long long typedef long long LL; typedef pair<int, int> PII; const…

shopee主营店铺链接怎么填,shopee店铺url在哪里找——站斧浏览器

要设置Shopee主营店铺链接&#xff0c;在设置页面中填写自己想要推广的其他店铺的链接地址&#xff0c;并进行测试和提交审核。通过设置主营店铺链接&#xff0c;卖家可以增加销售量和曝光率。 shopee主营店铺链接怎么填&#xff1f; Shopee主营店铺链接是指卖家在Shopee平台…

网站防盗链是什么

随着互联网的快速发展&#xff0c;网站的安全问题越来越受到关注。其中&#xff0c;防盗链是许多网站面临的一个重要问题。本文将介绍网站防盗链的基本概念、原因以及如何采取措施进行保护。 一、什么是网站防盗链&#xff1f; 网站防盗链是指未经授权的网站通过技术手段获取…

如何有效进行测试执行进度计划

测试执行通常都是处于软件测试生命周期的关键路径上&#xff0c;它不仅在测试过程中占有重要的地位&#xff0c;并且也会花费大量的测试时间。针对测试执行而进行的计划&#xff0c;即测试执行进度计划&#xff0c;是进行测试执行进度控制的基础。在进行测试执行进度计划制订的…

【Linux | 编程实践】 crontab 命令编辑大全 scp 应用

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

Vue入门——v-on标签

文章目录 规则v-on 一、案例总结 规则 v-on 作用&#xff1a;为html标签绑定事件语法&#xff1a; v-on&#xff1a;事件名&#xff1a;“函数名”简写为 事件名“函数名” 注意&#xff1a;函数需要定义在methods选项内部 一、案例 我们给案件绑定一个单击事件 <!DOCTYPE…

flutter开发实战-ValueListenableBuilder实现局部刷新功能

flutter开发实战-ValueListenableBuilder实现局部刷新功能 在创建的新工程中&#xff0c;点击按钮更新counter后&#xff0c;通过setState可以出发本类的build方法进行更新。当我们只需要更新一小部分控件的时候&#xff0c;通过setState就不太合适了&#xff0c;这就需要进行…

Shopee买家通系统内置防指纹技术可解决多账号管理操作

为了解决多账号管理的难题&#xff0c;我们发现了一款强大的利器——Shopee买家通系统&#xff0c;它为我们提供了便捷而高效的辅助操作。这款系统基于先进的指纹浏览器技术开发&#xff0c;实现了全自动化的操作&#xff0c;让多账号管理变得轻而易举。 Shopee买家通系统内置了…

layui+ssm实现数据表格双击编辑更新数据

layui实现数据表格双击编辑数据更新 在使用layui加载后端数据请求时&#xff0c;对数据选项框进行双击即可实现数据的输入编辑更改 代码块 var form layui.form, table layui.table,layer parent.layer undefined ? layui.layer : parent.layer,laypage layui.laypag…

5.【自动驾驶与机器人中的SLAM技术】2D点云的scan matching算法 和 检测退化场景的思路

目录 1. 基于优化的点到点/线的配准2. 对似然场图像进行插值&#xff0c;提高匹配精度3. 对二维激光点云中会对SLAM功能产生退化场景的检测4. 在诸如扫地机器人等这样基于2D激光雷达导航的机器人&#xff0c;如何处理悬空/低矮物体5. 也欢迎大家来我的读书号--过千帆&#xff0…

2023经典软件测试面试题

1、问&#xff1a;你在测试中发现了一个bug&#xff0c;但是开发经理认为这不是一个bug&#xff0c;你应该怎样解决&#xff1f; 首先&#xff0c;将问题提交到缺陷管理库里面进行备案。 然后&#xff0c;要获取判断的依据和标准&#xff1a; 根据需求说明书、产品说明、设计…

Figma安装指南:新手入门必看!

如果您想下载Figma客户端&#xff0c;可以直接在Figma官网Products>Downloads页面下载。 如果你不能访问Figma的官方网站&#xff0c;即使下载到客户端&#xff0c;你的网络环境也不能正常使用。 因为Figma的服务器在国外&#xff0c;在国内访问时经常会遇到网络不稳定的情…

如何制作教育培训小程序

教育培训行业近年来发展迅速&#xff0c;越来越多的机构开始意识到通过小程序来提供在线教育服务的重要性。小程序不仅可以为用户提供便捷的学习体验&#xff0c;还可以增加机构的知名度和品牌影响力。那么&#xff0c;如何制作一款教育培训小程序呢&#xff1f; 首先&#xff…