首页 > 编程语言 >【C++源码编译】

【C++源码编译】

时间:2024-11-15 15:43:54浏览次数:3  
标签:下以 后缀 C++ 注释 编译 源码 指令 链接

C++源码到二进制可执行文件的过程与C语言类似,包括四个过程:预编译、编译、汇编、链接
在这里插入图片描述
在这里插入图片描述
1、预编译
C/C++编译过程中的第一个阶段,主要目的是对源代码进行处理和准备工作。下面是预编译的主要步骤:

  1. 去除宏定义:将所有的 #define 删除,并展开所有的宏定义,将宏替换为具体的值或表达式。

  2. 处理条件预编译指令:对条件预编译指令进行处理,如 #if、#ifdef、#ifndef 等。根据条件判断结果,决定是否编译对应的代码块。

  3. 处理 #include 预编译指令:将被包含的文件插入到 #include 指令的位置。

  4. 过滤注释:将源代码中的注释部分去除,包括单行注释(//)和多行注释(/* … */)。

  5. 添加行号和文件名标识:为每一行添加行号和文件名标识,用于编译过程中的错误提示和调试。

预编译阶段主要包括宏展开、条件编译、头文件包含、注释过滤和标识添加等步骤,为后续的编译过程做好准备。
2、编译
1)词法分析+:将源代码的字符序列分割成一系列的记号,I
2)语法分析+:对记号进行语法分析,产生语法树+。
3)语义分析:判断表达式是否有意义。
4)代码优化
(5)目标代码生成+:生成汇编代码+
(6)目标代码优化
3、汇编
将汇编代码转变成机器可以执行的指令
4、链接
将不同的源文件产生的目标文件进行链接形成一个可以执行的程序。
(1) 静态链接:在链接的时候就已把要调用的函数链接到生成的可执行文件中。
把静态库删除也不会影响可执行程序执行。生成的静态链接库Windows下以 .lib 为后缀,Linux
下以 .a 为后缀。
(2) 动态链接:在链接的时候没有把调用的函数代码链接进去,而是在执行的过程中去找要链接的函数
生成的可执行文件中没有函数代码,只包含函数的重定位信息。
当删除动态库时,可执行程序就不能运行。生成的动态链接库Windows下以 .dll 为后缀,Linux下以 .so 为后缀。

标签:下以,后缀,C++,注释,编译,源码,指令,链接
From: https://blog.csdn.net/qq_31532979/article/details/143595328

相关文章

  • 2020年计挑赛往届真题(C++)
    因为17号要开赛了,甚至是用云端编辑器,debuff拉满,只能临时抱佛脚了各个选择题的选择项我就不标出来了,默认ABCD排,手打太麻烦了目录单选题:1.阅读以下语句:doublem=0;for(inti=3;i>0;i--)m+=1/i;将m保留三位小数输出,结果为()2.下列选项中,不是C++关键字的是()    3.下列选......
  • inline 函数:让你的 C++ 代码飞起来——深度剖析与实战技巧
    你是否曾经为C++代码中的函数调用开销感到烦恼?每次函数调用都需要创建栈帧、传递参数、跳转执行,这些看似微小的操作,累计起来就会成为性能瓶颈。在对性能要求苛刻的程序中,这些开销可能会影响到整体表现。今天,我们要聊的就是一个解决方案——inline函数。想象一下,如果编译器......
  • 搭建指南:宠物社交、APP小程序平台开发!源码部署,支持二开!
    宠物现在成了大家生活中少不了的小伙伴,而且越来越多人开始关心宠物的健康和快乐。这样一来,宠物行业就火了起来,各种宠物用品、服务和交友平台也跟着冒了出来。那么,如何搭建一个宠物交友系统呢?一、搭建指南搭建一个同城宠物交友系统涉及多个方面,包括需求分析、技术选型、系统设......
  • 线上线下游戏陪玩app源码,陪玩平台源码有哪些功能?
    系统源码 交友系统APP游戏陪玩系统源码圈子同城搭子小程序源码陪玩接单平台app家政系统源码家政预约服务小程序源码游戏陪玩源码搭建平台 陪玩小游戏源码是一套专为游戏爱好者设计的软件开发工具,它集成了多种功能,旨在为用户提供一个全方位的游戏社交平台。游戏陪玩app......
  • 基于yolov10的柿子成熟度检测系统,支持图像、视频和摄像实时检测【pytorch框架、python
     更多目标检测和图像分类识别项目可看我主页其他文章功能演示:yolov10,柿子成熟度检测系统,支持图像、视频和摄像实时检测【pytorch框架、python】_哔哩哔哩_bilibili(一)简介基于yolov10的柿子成熟度检测系统是在pytorch框架下实现的,这是一个完整的项目,包括代码,数据集,训练好的......
  • 深入探索 C++11 第一弹:现代 C++ 编程的基石与革新
    1、C++的发展历史C++11是C++的第⼆个主要版本,并且是从C++98起的最重要更新。C++11对C++语言的发展具有深远的影响,它使C++语言更加现代化、高效、灵活和易于使用,为开发者提供了更强大的工具和更好的编程体验,推动了C++在各个领域的广泛应用和持续发展。话不多说,下......
  • Linux系统编译QT5.15.0及串口问题
    编译流程:1>下载QT源码源码的下载可以到qt的官网http://www.qt.io/download/ 2>解压tarxvfqt-everywhere-src-x.x.x.tar.gz注意后缀和解压方式3>配置 ./configure进行环境配制。4>编译执行make编译,时间长,大概在三四个小时左右。5>安装sudomakeinstall需要5分钟......
  • 打卡信奥刷题(239)用C++工具信奥P1866 [普及组/提高] 编号
    编号题目描述太郎有NNN只兔子,现在为了方便识别它们,太郎要给他们编号。兔子们向太郎表达了它们对号码的喜好,每个兔子i......
  • Springboot餐饮管理系统设计与实现d9u1u(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,员工,菜品信息,菜品分类,菜品订单,餐厅餐桌,订座信息,食材信息,供应商,出库信息,入库信息,食材盘点,食材采购开题报告内容一、研究背景随着餐饮行业的快速......
  • Springboot彩妆专卖分享平台的设计与实现31682(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,美妆教程,美妆分类,美妆产品,美妆知识开题报告内容一、研究背景与意义随着社交媒体的兴起和人们对美的追求,彩妆已经成为现代女性生活中不可或缺的一部分。......