简单来说,首先,头文件被include到相应的cpp文件中,然后,将cpp编译生成obj文件,然后将obj文件连接生成exe文件。

所以,由上面的编译过程,要注意以下几点:

1.include的应该是头文件,不要include进cpp文件,因为如果如此,include进的cpp文件会在main文件中编译生成obj,其本身的cpp文件也会生成obj,当二者链接后,cpp中定义的函数全部会出现重复定义的错误!而头文件不会生成obj文件,只会在include该文件的地方展开,所以不会发生以上问题。

2.重复定义问题。最好不要在头文件里面定义函数,但可以声明函数。声明函数就是只写函数名,不写具体实现。如果写具体实现,文件较少时可以避免重复定义来通过编译,但如果文件变多,a文件被b文件include,a文件被c文件include,b文件被c文件include,那么c文件中定义的函数会出现重复定义问题。不过该情况可以用#ifndef #define #endif来解决,即在每个头文件中都加上该内容,那么一旦被include,整个头文件内容便会等价复制到相应文件,如果被复制多次,则只会被编译一次。这样可以避免重复定义,重复声明。

多文件中函数的重复定义相关推荐

  1. C++中不允许重复定义全局变量

    文章目录 1 C++中不允许重复定义全局变量 1 C++中不允许重复定义全局变量 C++中不允许重复定义全局变量: 在C语言中,重复定义多个同名的全局变量是合法的. 在C++中,不允许定义多个同名的全 ...

  2. python中可变参数args传入函数时储存的类型是_[转载]Python中函数的参数定义和可变参数*args与**args...

    Python中函数的参数定义和可变参数 *args与**args区别 刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和** ...

  3. c语言函数返回值类型必须,C++中函数类型与定义的函数返回值类型必须相同么?...

    C++中函数类型与定义的函数返回值类型必须相同么?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C++中函数类型与定义 ...

  4. [原创]Enterprise Architecture V7.5 C++代码生成时,头文件中函数声明没有注释,CPP中函数定义却有注释。...

    这几天一直在用Enterprise Architecture来抽象项目中要用到的一些数据结构和类,然后都做得差不多了之后发现,生成代码的时候.h文件中类成员函数部分没有注释,但是.cpp文件中的函数定 ...

  5. Python批量导入Excel文件中的不重复数据到SQLite数据库

    封面图片:<Python可以这样学>,董付国,清华大学出版社 ============== 好消息:智慧树网APP"知到"中搜索"董付国"可以免费观 ...

  6. Python中函数的参数定义和可变参数

    刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解.其实只要把函数参数定义搞清楚了,就不难理解了. 先说说函 ...

  7. python内置函数调用_Python中函数的基本定义与调用及内置函数详解

    前言 函数function是python编程核心内容之一,也是比较重要的一块.首先我们要了解Python函数的基本定义: 函数是什么? 函数是可以实现一些特定功能的小方法或是小程序.在Python中有 ...

  8. m文件中函数的执行顺序

    当进行多个GUI协同工作时,要用到uiwait和uiresume函数.此时,理解函数的执行顺序此时是很关键的. 首先理解uiwait和uiresume函数的作用. uiwait函数:阻塞m文件的执行, ...

  9. python可变参数函数二阶导数公式_Python中函数的参数定义和可变参数

    刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解.其实只要把函数参数定义搞清楚了,就不难理解了. 先说说函 ...

最新文章

  1. 知其然,知其所以然:基于多任务学习的可解释推荐系统
  2. CH - 0805 防线(二分+思维)
  3. lora模块在牛联网和智慧农业中的应用案列
  4. 数组元素的地址计算问题(一维到高维)
  5. ProjeQtOr(项目管理软件) v9.0.2
  6. Apicloud——关于索引列表
  7. 已解决:手动打包war包结果无法在Tomcat中部署
  8. 设计模式 - (3)抽象工厂模式(创建型)
  9. Flutter自定义iconfont字体图标
  10. Linux(ubuntu 18)上编译 及修改 INAV 飞控代码(混控功能)
  11. C# CAD二次开发之字体替换 文字样式 处理DBText
  12. 使用prometheus+grafana监控k8s集群
  13. xpub ypub zpub ---- btc address
  14. 数学中的圆周率符号怎么输入
  15. 移动互联网创业是什么意思?有哪些要注意的?
  16. mysql 5.6 安装库_MySQL5.6安装步骤图文详解
  17. android kotlin扩展添加域名
  18. python读xml文件生成.h头文件_Python创建xml文件示例
  19. 从几何角度全新理解线性代数
  20. 科学家发现人类演化新证据河南栾川直立人化石

热门文章

  1. 团战可以输、提莫必须死 oj
  2. 战国都城形态的东西差别
  3. 双色球彩票系统(java)
  4. ACPI的介绍和概念
  5. python过去电脑网关不可用怎么办_电脑显示默认网关不可用的解决技巧
  6. mysql 一行数据拆分成多行
  7. html让页面卡住,网页假死 网页总是假死,失去响应怎么办
  8. 从键盘中输入年、月、日,判断这一天为当年的第几天(考虑闰年和非法输入的情况)
  9. ss 查看网络连接、路由表、接口状态、端口信息
  10. 中国科学院计算机博士张弛,张驰(中国科学院地质与地球物理研究所副研究员)_百度百科...