0%

编译和链接过程中的重复定义

2019年3月8日 下午12:53
头文件重复包含和变量重复定义 - 代码面包 - CSDN博客

编译:

  1. C/c++编译的基本单元是.c或.cpp文件
    1. 其实就是一个根据include不断展开的过程
    2. 一个.c或.cpp会生成一个编译结果.o文件
  2. 各个基本单元的编译是相互独立的,#ifndef等条件编译只能保证在一个基本单元(单独的.c或.cpp文件)中头文件不会被重复编译,但是 无法保证两个或者更多基本单元中相同的头文件不会被重复编译

链接:

那么到底怎么样才能避免重复定义呢?

  1. 其实避免重复定义关键是要避免重复编译,防止头文件重复包含是有效避免重复编译的方法
  2. 但是最好的方法还是记住那句话:头文件尽量只有声明,不要有定义。这么做不仅仅可以减弱文件间的编译依存关系,减少编译带来的时间性能消耗,更重要的是可以防止重复定义现象的发生,防止程序崩溃。

类似博文:

  1. error:LNK2005 _main 已经在 *.obj 中定义 - 焱少的博客 - CSDN博客
  2. C/C++ 中头文件相互包含引发的问题 - 海风林影 - CSDN博客
  3. C++ 在.h文件中包含头文件和在.cpp文件中包含头文件有什么区别? - xueruifan的专栏 - CSDN博客