码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C语言编译过程


    最近在看C语言的基础知识,之前只关注编译最后生成的二进制文件,不知道编译过程,学习到了整理一下。

    一、C语言编译过程

    过程如下:

    预编译---->编译---->汇编---->链接器输出---->二进制文件。

    编译器将编译分为预处理、编译和汇编。

    连接器把各个独立的模块链接为可执行程序。

    静态链接在编译期完成,动态链接在运行时完成。

    预编译过程:

    1、处理所有的注释,以空格代替。

    2、将所有的#define删除,并且展开所有的宏定义。

    3、处理条件编译指令#if、#ifdef、#elif、#else、#endif。

    4、处理#include,展开包含的文件。

    5、保留编译器需要使用的#pragma指令。

    总结:预编译改替换替换,展开#include文件,保留#pragma指令。

    编译:

    1、对预处理文件进行词法分析、语法和语义分析:

    词法分析:关键字、标识符、立即数是否合法;

    语法分析:表达式是否遵循语法规则;

    语义分析:在语法基础上分析表达式是否合法。

    2、分析结束后进行代码优化生成相应的汇编代码文件。

    总结:编译对预处理文件进行分析,生成汇编代码。

    汇编:

    汇编器将汇编代码转化为机器可执行的指令,每个汇编语句几乎都对应一条机器指令。

    总结:汇编是把代码转化为机器能听懂的文件。

    连接:

    连接器是把代码中各个汇编生成的o文件连接起来。

    分为静态链接

    动态链接:

  • 相关阅读:
    C++基础语法(篇二)
    2022年面试复盘大全500道:Redis+ZK+Nginx+数据库+分布式+微服务
    TCP编程及基础知识
    AI低代码维格云相册视图怎么用?
    收集Stream流
    在CSDN写文章是一种什么体验?
    HTML静态网页成品作业(HTML+CSS)——花主题介绍网页设计制作(1个页面)
    在Mac上一键安装Mysql(解决所有安装问题)
    Docker 必知必会4----容器之间的通信
    icpc刷题记录
  • 原文地址:https://blog.csdn.net/weixin_58125062/article/details/133838201
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号