C语言编译过程详解

2023-10-26

前言

C语言程序从源代码到二进制行程序都经历了那些过程?本文以Linux下C语言的编译过程为例,讲解C语言程序的编译过程。

编写hello world C程序:

// hello.c
#include <stdio.h>
int main(){
    printf("hello world!\n");
}

编译过程只需:

$ gcc hello.c # 编译
$ ./a.out # 执行
hello world!

这个过程如此熟悉,以至于大家觉得编译事件很简单的事。事实真的如此吗?我们来细看一下C语言的编译过程到底是怎样的。

上述gcc命令其实依次执行了四步操作:1.预处理(Preprocessing), 2.编译(Compilation), 3.汇编(Assemble), 4.链接(Linking)。

C_complie

示例

为了下面步骤讲解的方便,我们需要一个稍微复杂一点的例子。假设我们自己定义了一个头文件mymath.h,实现一些自己的数学函数,并把具体实现放在mymath.c当中。然后写一个test.c程序使用这些函数。程序目录结构如下:

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

C语言编译过程详解 的相关文章

  • GDAL多光谱与全色图像融合简单使用

    目录 简述 C 代码 效果对比 GDAL融合效果和原始多光谱波段对比 GDAL融合效果和原始全色波段对比 ARCGIS融合效果与原始全色和多光谱对比 GDAL融合效果与ArcGIS融合效果对比 简述 最近在GDAL的代码中看见了gdalpa
  • Lua和C++交互总结(很详细)

    出处 http blog csdn net shun fzll article details 39120965 一 lua堆栈 要理解lua和c 交互 首先要理解lua堆栈 简单来说 Lua和C c 语言通信的主要方法是一个无处不在的虚拟
  • Windows驱动开发(一)第一个驱动程序

    首先我们需要了解 在操作系统中 是分两种权限的 一种是内核态 我们也称为0环 一种是用户态 称之为3环 而在我们的电脑中 驱动程序是运行在内核态的 这意味着和操作系统内核是在同一权限的 而普通的应用程序的权限是最低的 高权限谁不想拥有呢 因
  • 值得学习与推荐的c/c++框架和函数库

    这几天不上班 翻翻Evernote中记录的一些笔记 刚好有时间把记录的一些好玩链接转载一下 这篇文章里提到的很多库都用过 尤其是图像处理相关库 尤其是opencv及cximage 当时做图像算法时 很多算法就是从上面找来 然后自己修改的 比
  • 内存管理——分页分段

    一 分页存储管理 1 页面与页框 1 页面 将一个进程的逻辑地址空间分成若干个大小相等的片 称为页面或页 并为各页加以编号 2 页框 相应于页面 把内存空间分成和页面相同大小的若干个存储块 称为 物理 块或页框 frame 3 页内碎片 在
  • floor(),ceil()函数

    地板 天花板函数 均包含在math h中 意思分别为 返回不大于形参的最小整数和不小于形参的最大整数 include
  • Trace Function Enter, Exit and Leave

    http developer nokia com community wiki Trace Function Enter Exit and Leave
  • java IO、NIO、AIO详解

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 IO流 同步 阻塞 二 NIO 同步 非阻塞 三 NIO2 异步 非阻塞 正文 回到顶部 概述 在我们学习Java的IO流之前 我们都要了解几个关键词 同步与异步 sy
  • 磁盘调度算法笔记和练习题

    磁盘调度算法 先来先服务FCFS 最短寻道时间优先SSTF 扫描调度SCAN 练习题 先来先服务FCFS 最短寻道时间优先SSTF 扫描调度SCAN 它是一次只响应一个方向上的请求 这个方向上的请求都响应完了 再掉头处理另一个方向上的 有点
  • C++:指向类的成员的指针

    引 想必接触过C的朋友们对C语言中指针的概念已经有了深入的了解 如果初步进行了解的朋友可以看一下 C语言基础学习笔记 指针展开来讲的基本知识点包括 指针的概念 指针的定义和初始化及简单使用 指针函数和函数指针 有关指针函数和函数指针的内容上
  • 在聚会中常玩数七的游戏,七的倍数和带有七的数字都不能说,比如14,27,28。请找出1~100的不能说的数字。...

    利用ES5的filter高阶函数来实现 var arr 1 2 3 4 5 6 7 17 27 21 22 28 100 r arr filter function x return x 10 7 x 7 0 alert r 7 14 17
  • Public Private Protect Inheritance and access specifiers

    In the previous lessons on inheritance we ve been making all of our data members public in order to simplify the example
  • C#实现FTP文件夹下载功能【转载】

    网上有很多FTP单个文件下载的方法 前段时间需要用到一个FTP文件夹下载的功能 于是找了下网上的相关资料结合MSDN实现了一段FTP文件夹下载的代码 实现的思路主要是通过遍历获得文件夹下的所有文件 当然 文件夹下可能仍然存在文件夹 这样就需
  • MacOS中清除原有ssh公钥方法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 用ssh的跳转登录服务器后 ssh会把你每个你访问过计算机的公钥 public key 都记录在 ssh known hosts 当下次访问相同计算机时 SSH会核对公钥
  • gdb attach 进程调试

    gdb调试正在运行的进程 GDB可以对正在执行的程序进行调度 它允许开发人员中断程序 并查看其状态 之后还能让这个程序正常地继续执行 gdb attach xxxxx xxxxx为利用ps命令获得的子进程process
  • Linux(13):例行性工作排程

    例行性工程 听谓的排程是将工作安排执行的流程之意 Linux 排程就是透过 crontab 与 at 这两个东西 两种工作排程的方式 一种是例行性的 就是每隔一定的周期要来办的事项 一种是突发性的 就是这次做完以后就没有的那一种 at at
  • C/C++编程:令人印象深刻的高级技巧案例

    C C 编程语言在软件开发领域有着悠久的历史 由于其高效 灵活和底层访问能力 至今仍然被广泛应用 本文将介绍一些在C C 编程中令人印象深刻的高级技巧 帮助读者提升编程水平 更加高效地使用这两种强大的编程语言 一 指针运算与内存管理 C C
  • C++ 字符串比较------strcmp函数和strncmp函数

    strcmp 函数原型 int strcmp const char str1 const char str2 功能 strcmp函数会按照字典顺序逐个比较两个字符串的字符 直到遇到不同的字符或者遇到字符串结束符 0 返回值 该函数返回值如下
  • C 语言文件读取全指南:打开、读取、逐行输出

    C 语言中的文件读取 要从文件读取 可以使用 r 模式 FILE fptr 以读取模式打开文件 fptr fopen filename txt r 这将使 filename txt 打开以进行读取 在 C 中读取文件需要一点工作 坚持住 我
  • C++实现函数重载的原理

    一 函数重载的概念 C 中允许存在同名函数 但要求函数参数的类型 个数不同 这些同名函数就称为函数的重载 void func int a int b cout lt lt func int a int b lt lt endl void f

随机推荐

  • Android逆向工程:MIUI系统大揭秘:去不掉的小米账号!

    哈喽小伙伴们大家好 欢迎继续学习探讨MIUI系统的安全防范知识 在上篇博客中 Android逆向工程 带你领略MIUI系统的账号安全防范机制 账号是从哪里获取的 我们了解到了MIUI系统通过对关键代码进行封装进系统内 对外采用统一调用接口的
  • Web集群部署实战

    Web集群部署实战 Web集群架构图 系统规划 实验要求 购买一个 SFS 服务 以及 3 台云主机 部署 apache php 的网站 购买云主机3台 部署网页数据 挂载 SFS 服务到跳板机 root ecs proxy dnf ins
  • Docker

    参考资料 官方文档 Redirecting 官方文档超级详细 仓库地址 Docker Hub 发布到仓库 git pull push b站教程 狂神说Java Docker最新超详细版教程通俗易懂 哔哩哔哩 bilibili 这个教程非常简
  • 详解Python迭代器,生成器,装饰器

    文章目录 迭代器 迭代器协议 迭代器协议实现斐波那契数列 生成器 装饰器 装饰器进阶骚操作 迭代器 简介 迭代器是python里面可以记住遍历位置的对象 迭代器只能往前不能往后 使用iter 创建一个迭代器 使用next 返回一个迭代器里面
  • 嵌入式--RTC实时时钟原理及相关库函数功能

    一 RTC实时时钟原理 1 RTC实时时钟是一个独立的定时器 可以提供日期时间或者闹钟的功能 其核心是通过32位可编程计数器RTC CNT计数来进行时间配置 2 图1中RTCCLK为RTC时钟源 其主要是由外部晶振提供时钟源 一般为32 7
  • 数据结构单链表——建立单链表

    0 建立单链表前的工作 include
  • CVE-2022-22947 Spring Cloud Gateway RCE漏洞复现分析

    目录 一 基本介绍 1 微服务架构与Spring Cloud 2 Spring Cloud生态 3 网关作用 4 Spring Cloud Gateway使用 5 Spring Cloud Gateway概念 5 1 路由 Route 5
  • 群晖nas上部署gitea后修改IP地址

    事件 今天 我在nas的套件中心中发现了Gitea这个套件 想到自己的代码都是保存在GitHub或者Gitee上面的 于是乎我边在nas上面装了这个套件 装备将代码在nas里面也备份一份 我的nas所在网络没有公网IP 用内网穿透形式弄的
  • JAVA学习笔记(1)与日期相关的类相关知识记录

    介绍Java涉及日期的类 Date类 获取日期对象 Calendar类 获取日期的特定部分 时分秒 Date类 构造函数 一共有两个构造函数Date 使用当前日期和时间初始化对象 Date long millisec 接受一个参数 该参数是
  • Leetcode 刷题笔记(三) —— 数组类型解题方法三:滑动窗口

    文章目录 系列文章目录 题录 209 长度最小的子数组 904 水果成篮 76 最小覆盖子串 困难 总结 系列文章目录 一 数组类型解题方法一 二分法 二 数组类型解题方法二 双指针法 三 数组类型解题方法三 滑动窗口 四 数组类型解题方法
  • 多线程、异步爬取数据(优化篇)

    爬虫优化 一般方法 多线程 异步 scrapy框架 理解要点 scrapy文件目录 middleware py jd refer py item py pipeline py debug py 一般方法 京东商品数据爬取 91 403s p
  • DOS操作命令

    DOS操作命令 1 cleanmgr 打开磁盘清理工具 2 compmgmt msc 计算机管理 3 conf 启动系统配置实用程序 4 charmap 启动字符映射表 5 calc 启动计算器 6 chkdsk exe Chkdsk磁盘检
  • 如何检测手机当前为“桌面”(desktop)状态

    介绍 一些桌面软件会在用户把手机切换到桌面 desktop 时显示一些特定的信息 如图片 滚动文字等 达到一种个性桌面的效果 这里就介绍一种检测 桌面 的方法 S60 2nd的 桌面 是电话应用 S60 3rd的 桌面 是Idle exe
  • 声明式事务源码解析--- Spring源码从入门到精通(二十六)

    上篇文章介绍了事务代码的实例 声明式事务 Spring源码从入门 到精通 二十五 这篇文章主要介绍事务源码解析 一 EnableTransactionManagerment 里面import一个TransactionManagementCo
  • 【RDMA】技术详解(一):RDMA概述

    目录 0 前言 一 技术背景 1 传统的 TCP IP 网络通信的弊端 2 新的网络通信技术 TOE and RDMA 2 1 TOE TCP IP协议处理工作从CPU转移到网卡 2 2 RDMA 绕过CPU 数据直接 传 到对端内存 二
  • linux命令 uname -r 和 uname -a 的详解

    1 uname r 显示操作系统的发行版号2 uname a 显示系统名 节点名称 操作系统的发行版号 内核版本等等 系统名 Linux 节点名称 qyw 操作系统的发行版号 3 10 0 957 21 3 el7 x86 64 命名规则
  • Nginx负载均衡session会话保持方法

    负载均衡时 为了保证同一用户session会被分配到同一台服务器上 可以使用以下方法 1 使用cookie 将用户的session存入cookie里 当用户分配到不同的服务器时 先判断服务器是否存在该用户的session 如果没有就先把co
  • Java 秒杀方案(下)

    技术点 前端 Thymeleaf Bootstrap Jquery 后端 SpringBoot MyBatisPlus Lombok 中间件 Redis RabbitMQ 秒杀方案简介 本短文完成项目搭建 分布式 Session 和秒杀功能
  • Linux DDR3寻址地址映射

    1 相关原理 DDR3内部相当于存储表格 和表格的检索相似 需要先指定 行地址 row 再指定列地址 column 这样就可以准确的找到需要的单元格 对于DDR3内存 单元格称为基本存储单元 也就是每次能从该DDR3芯片读取的最小数据 存储
  • C语言编译过程详解

    前言 C语言程序从源代码到二进制行程序都经历了那些过程 本文以Linux下C语言的编译过程为例 讲解C语言程序的编译过程 编写hello world C程序 hello c include