论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
DevOps与敏捷开发
›
C++学习:C++是怎样运行的
C++学习:C++是怎样运行的
涛声依旧在
金牌会员
|
2024-8-2 05:06:30
|
显示全部楼层
|
阅读模式
楼主
主题
988
|
帖子
988
|
积分
2964
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
C++ 是一种强范例的编程语言,支持面向对象、泛型和低级内存操作。它的工作机制包括从编写源代码到生成可实行文件的一系列步骤。C++与文件无关,文件只是容纳运行内容的载体,需要对文件以目标系统的规则编译后,才能在目标系统中运行。
预处理
在编译之前,预处理器会处理源代码中的预处理指令(比方 #include、#define 等)。预处理器会实行以下操作:
文件包含
:处理 #include 指令,将头文件内容插入到源文件中,可被理解是一种简朴复制。
比方,在test.h中只写一个 } ,此时下面两种情况的结果是一致的,“#include”只是将目标文件的代码粘贴在当前代码中,并不会做其他任何操作。
宏替换
:处理 #define 指令,替换宏定义,即将关键词替换为指定内容。
下图中,可以利用“INTEGER”代替“int”,编译运行正确,这是因为,在编译之前,即预处理时,“INTEGER”就已经被替换为“int”了,因此编译器根本就不知道"INTEGER"的存在,也就不会发生编译错误。
条件编译
:处理 #if、#ifdef、#ifndef 等指令,控制哪些部分的代码会被编译。
“
#if
0”代表禁用,即不会被编译器编译。
“
#ifdef
”代表如果宏定义了某个参数,则实行内部的代码,否则跳过。
“#
ifndef
”代表如果没有宏定义某个参数,则实行内部的代码,否则跳过。
预处理的结果是一个纯粹的 C++ 源代码文件,没有任何预处理指令。
编译
编译器将预处理后的 C++ 源代码转换为目标代码(通常是呆板码)。
语法分析
:查抄代码的语法是否正确。
语义分析
:查抄代码的语义是否正确(比方范例查抄)。
代码生成
:生成目标代码,即呆板码。
编译的输出通常是一个或多个目标文件( .obj 或 .o文件)。
链接
为了便于维护和步伐的简洁性,需要在多个cpp文件中对用户自定义的各种函数举行定义,此时就需要利用链接器将目标文件和库文件链接在一起,生成最终的唯一的可实行文件(.exe)。链路器会查抄实行步伐内需要利用的外部函数,即不在本文件内被声明定义的函数。然后将他们与被实行步伐链接在一起。于是,在实行步伐时,如果碰到了本文件内无声明定义的函数,就可以根据链接找到对应的文件里调用实行了。
在链接时,并不是将所有cpp文件都与被实行步伐链接。如果被实行步伐中,没有利用这个外部函数,它就不会将这个函数链接进来。一个例外是,在被实行的步伐中,如果这个函数在另一个被声明的函数体里,则即便它没有被利用,也会被链接。这是因为即便这个文件倒霉用这个函数,链接器不能确定其他文件里不会利用它,所以会被链接。
如下图所示,log.h中声明和定义了函数log,在主函数中将log嵌套在另一个函数printfunc中。如果不包含头文件log.h,则会报错:log未被声明。这其实很奇怪:因为我们表明了printfunc,即在主函数中倒霉用它,也就倒霉用log函数,但它依然会在链接时报错(link error),原因是不确定其他翻译单位利用printfunc函数。
如果不嵌套函数,也不包含头文件,同时倒霉用函数log,则不会报错。
链接的结果是一个可实行文件,可以在操作系统中运行。
运行
生成的可实行文件可以在目标操作系统上运行。运行时,操作系统会加载步伐,将其分配到内存,并开始实行步伐的入口点,通常是 main函数,但也可以设置成其他函数,只是需要有一个入口点,但不一定是main。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
涛声依旧在
金牌会员
这个人很懒什么都没写!
楼主热帖
MySQL基本SQL语句之高级操作
maven配置步骤及问题
Juc并发编程12——2万字深入源码:线程 ...
史上最全MongoDB之部署篇
IOS OpenGL ES GPUImage 图像黑白色调 ...
【云原生】裸金属架构之服务器安装VMWa ...
Flink-基于 DataStream API 实现欺诈检 ...
一文读懂K-Means原理与Python实现 ...
大数据ETL开发之图解Kettle工具(入门 ...
Mysql进阶优化篇01——四万字详解数据 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
虚拟化与私有云
云原生
物联网
移动端开发
网络安全
快速回复
返回顶部
返回列表