在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文件。

C++主流预处理,编译和链接过程相关推荐

  1. 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  2. 程序的编译和链接过程

    一.虚拟机.linux简介 简单介绍一下虚拟机还有就是各种操作系统,比如centos,Ubuntu 操作系统:linux(centos.Ubuntu.redhat),Android,Windows(x ...

  3. C/C++的编译和链接过程

    目录 从源文件生成可执行文件(书中第2章) 1.Preprocessing预处理--预处理器cpp 2.Compilation编译--编译器cll ps:vs中优化选项设置 3.Assembly汇编- ...

  4. 【C语言关键知识点1】C语言的预处理、编译和链接过程

    1 引言   再一次回顾C语言的关键基础知识,今天带大家深刻的剖析一下C语言的预处理.编译(汇编)和链接的过程,以加深对C语言及编程本质的理解!   学习C语言首先要理解的就是如何将程序员输入的源代码 ...

  5. C语言 程序的翻译 预处理 编译 汇编 链接 #define详解

    1.程序的翻译环境和执行环境 执行环境:所在操作系统的平台 win10 win11 linux 翻译环境:MSVC gcc g++ 你的vs 2019 和2022 是集成开发环境把编辑器编译器全部给你 ...

  6. C语言编译、链接过程探究

    编译器基本构成: C语言编译基本流程图解: 预处理: 处理所有的注释,以空格代替 将所有的#define删除,并且展开左右的宏定义 处理条件编译指令#if,#ifdef ,#elif,#else , ...

  7. C/C++编译和链接过程详解 概述 (重定向表,导出符号表,未解决符号表)

    详解link  有 些人写C/C++(以下假定为C++)程序,对unresolved external link或者duplicated external simbol的错误信息不知所措(因为这样的错 ...

  8. 描述C,C++编译和链接过程

    为什么80%的码农都做不了架构师?>>>    详解link 有 些人写C/C++(以下假定为C++)程序,对unresolved external link或者duplicated ...

  9. u-boot移值(九)-u-boot的编译、链接过程

    上一篇文章<u-boot的配置>了解了u-boot的配置过程,配置完成后,我们只需要一条简单的指令: make all 就能实现对u-boot的编译,Makefile也类似于C编程,先包含 ...

最新文章

  1. 一顿关于心智、机器和智能的哲学大餐!!
  2. 【IT笔试面试题整理】丑数
  3. C++11并发编程:多线程std::thread
  4. 系统架构师学习笔记-信息系统基础知识
  5. idea创建Maven项目后启动报404
  6. java更新linux_linux下 更新 java版本
  7. 思维导图有什么用?思维导图的优势、缺点及其适用人群详解
  8. ios免越狱自签工具
  9. 如何保存PPT的背景图片
  10. 093 一个人的固执里,藏着低水平的认知
  11. 零基础学Docker【2】 | 一文带你快速学习Docker常用命令
  12. 教你用OpenCV 和 Python给证件照换底色(蓝底 <->红底->白底)
  13. CISCO 服务器配置 RAID 指南及安装操作系统
  14. 成功解决笔记本重装系统后没有无线网
  15. 最新版的docker安装
  16. Luogu P2524题解
  17. Android 阿里云仓库代理配置
  18. 《人民日报》发文探讨区块链,新风口还是概念炒作?
  19. vue 3秒自动请求接口 刷新页面
  20. STM32模拟IIC驱动sht30温湿度传感器

热门文章

  1. 【转】Dynamics CRM:“the given key was not present in the dictionary”
  2. 【转】abp vNext微服务框架分析
  3. SharePoint 2013 RBS(Remote BLOB Storag) 安装、部署、垃圾回收
  4. 【手算】行列式树形展开
  5. 【Codeforces - 找不到题号】三元环计数(bitset优化,压位)
  6. 【牛客 - 371牛客OI周赛7-提高组B】小睿睿的询问(RMQ,ST表维护下标)
  7. 【qduoj - 142】 多重背包(0-1背包的另类处理,dp)
  8. 【CodeForces - 1038B 】Non-Coprime Partition (构造,数组特征)
  9. 用OpenSSL编写SSL,TLS程序
  10. Centos7换yum源