C++主流预处理,编译和链接过程

在C++的程序的编写过程中,基本上都碰到过LNK2005的错误吧,下面就针对这个问题详细分析:
  首先,预处理阶段:
这一过程,主要针对#include和#define进行处理,具体过程如下:
对于cpp文件中经常会出现#include来包含某个头文件,在进行预处理之后,所有的#include命令都将替换成该头文件中的详细内容,如果该头文件中还包含另外的头文件,采用同样的方法进行递归处理。同样#define亦是如此,对用它进行宏定义的字符进行替换,这里就是简单的替换。所以整个预处理过程就是进行简单的替换。
  其次,预编译过程
这一过程主要针对预处理之后的cpp文件编译称为obj文件,即目标文件(注意,在这里仅仅是针对cpp文件,对头文件是不做任何处理的,所以在多文件工程中定义全局变量的时候,我们一定要记得把全局变量定义在cpp文件中,因为如果定义在头文件中,我们要使用该变量的话很容易出现already define的错误)。主要是通过编译器和汇编器生成二进制文件,便于链接处理。
  对于这个,我给个实例和其解释:
在链接的过程中,用extern申明的变量,我们很明确的知道这是一个外部变量,那么对于此,连接器会到外部的obj文件中区寻找该变量,如果说是我们在该obj文件编译的cpp中有该变量的定义的话,那么这就不是一个声明了,而是一个定义。所以,我们的这个obj文件编译的源文件cpp,千万不要包含有该变量定义的头文件或者cpp文件,否则就是重定义,也就是说有些重定义是在链接的时候才会确定的一个错误,所以最好是在.h文件中用extern进行声明,然后再随便一个cpp文件中进行定义。在你想要使用该变量的cpp文件中只需要包含该头文件即可。
  第三,链接过程
如果写程序中没有足够的警觉,在这个过程中极易出现链接错误。首先该过程主要是将众多的obj文件生成exe文件。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell中sed -i特殊字符

可参考文献: Linux生产环境上,最常用的一套“sed“技巧 看懂shell中的各种语句

Win10远程桌面提示你的凭据不工作的处理方法

需要确保在组策略编辑器(WinR 输入 gpedit.msc )中计算机配置->Windows设置->安全设置->本地策略->安全选项->右侧的网络访问:本地帐户的共享和安全模型。修改为使用经典模式即可!

子网掩码255.255.0.0与255.255.255.0的区别

先介绍子网掩码:子网掩码,是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成…

日期格式不符合要求:Unparseable date: quot;3e8a4d83533744c698216535a65850c0quot;

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 报错如题 2. 原因:使用token 记录当前登陆用户,token值已经过期。 HttpClientUtil.doPost(&…

Spring中都用到了哪些设计模式?

Spring 框架中用到了哪些设计模式: 工厂设计模式 : Spring使用工厂模式通过 BeanFactory、ApplicationContext 创建 bean 对象。 代理设计模式 : Spring AOP 功能的实现。 单例设计模式 : Spring 中的 Bean 默认都是单例的。 模板方法模式 : Spring 中 jdbcTemplat…

解决火车票网上订票难的方案

春运是最热的话题,买火车票是最流行的事情;网上订票给大家带来了极大的便利,但是由于各种原因,网上订票成功率很低,至少比在淘宝上买东西困难多了。在下不才,试图提出其解决方案。 问题:并发访问…

小程序支付成功后跳转页面失败

在安卓报错 relaunch:fail can not invoka lelaunch in background,ios正常,换成别的跳转方式即可转载于:https://www.cnblogs.com/wang-xing/p/9488961.html

linux 中 ~/. 是什么意思

~代表你的/home/用户明目录假设你的用户名是x,那么~/就是/home/x/.是代表此目录本身,但是一般可以不写所以cd ~/. 和cd ~ 和cd ~/效果是一样的但是.后面有东西又是另外一个问题,点在文件名头部,代表一个隐藏文件~/.local是你的主目…

Nginx 启动报错 “/var/run/nginx/nginx.pid failed”

问题: 重启虚拟机后,再次重启nginx会报错: open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory) 解决方法: (1)进入 cd /usr/local/nginx/conf/ 目录,编辑配置…

eclipse关闭讨厌的菜单

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 不知道动哪了,开启了这个菜单: 2. 很感谢群友帮我找到关闭方法,点击 如下 按钮: 然后就…

SSL加密工作原理RSA免密登录原理

SSL 是一个安全协议,它提供使用 TCP/IP 的通信应用程序间的隐私与完整性。因特网的 超文本传输协议(HTTP)使用 SSL 来实现安全的通信。 在客户端与服务器间传输的数据是通过使用对称算法(如 DES 或 RC4)进行加密的。…

linux命令中cd / 和 cd ~

cd命令:切换当前目录至其它目录,比如进入/etc目录,则执行 cd /etccd /: 在Linux 系统中斜杠“/”表示的是根目录。 cd / ,即进入根目录.cd ~命令是,进入用户在该系统的home目录,例如xz用户,则进入/root/xz目…

h5页面点击事件ios没反应 移动端兼容性问题

$(document).on("click",".动态添加的dom",function(){  console.log("11") }) //在ios里这里动态添加的dom点击事件不会触发,解决办法:给触发点击事件动态添加的dom增加样式,cursor:pointer |||||| 或者增加一个touch事件 ios…

我不知道的事——深克隆和浅克隆

推荐一部好电影《致命魔术》。(此处为植入广告) 推荐理由:涉及人性。画面不错,剧情跌宕,亦魔亦幻(此处的”魔“为魔术的”魔“)。虽然女猪脚不尽如人意,但是男猪脚比较帅。而…

服务器搭建

2019独角兽企业重金招聘Python工程师标准>>> 最近弄了个阿里云的服务器,想在上面搞点东西,故要搭建一套环境。登录linux,在终端输入 uname -a 即列出linux的内核版本号。(服务器网址:http://101.132.235.56…

mybatis内部类映射写法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. B类是A类中的内部类。 2.  映射写法: com.XXX.A$B , 注意A类和B类之间用 $ 表示内外关系,而不是常用的 …

集群,分布式,微服务的区别

参考文献: 集群,分布式,微服务概念和区别理解 谢谢作者分享!

Linux bash总结(一) 基础部分(适合初学者学习和非初学者参考)

第一部分 bash简介 —— 对bash进行简要介绍 第二部分 bash示例和书写流程 —— 以一个简单的bash为例,说明书写、执行bash的流程 第三部分 bash基础语法 —— 本章内容比较多,主要介绍if...else...条件判断,for循环等等。对于有编…

用 Python 语言来写游戏

每个程序员差不多都是从计算机爱好者开始的,尤其是那些令人心醉神迷的电脑游戏,不仅造就了整个游戏产业,推动了计算机行业软硬件的升级,而且吸引了大量的爱好者最终加入了游戏软件开发的行业。腾讯、网易、盛大、完美时空等公司的…

各种操作系统简介和功能分析

Windows 开发商 Microsoft Windows98/me Windows2000/XP Windows Server2003 Windows Vista Windows98/me是基于MS-DOS的混合的16/32位操作系统正慢慢的退出PC舞台了,2000/X P以及Server2003都是基于WindowsNT的32位操作系统,XP/Server2003已经有64位版本了。 Vista是微软最…