首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么将C++头函数放在单独的文件中?

为什么将C++头函数放在单独的文件中?
EN

Stack Overflow用户
提问于 2016-08-09 21:20:41
回答 3查看 55关注 0票数 0

我正在学习C++教程,在其中一篇关于预处理程序/头文件的文章中,作者创建了2个‘头文件’(当然不是技术术语),例如h和example.cpp。例如,他将函数和头保护的前向声明放在前面,在example.cpp中放置函数的实际正文。为什么会这样呢?我试着把函数的主体放在example.h文件中,它工作得很好,那么他为什么要把它分开呢?这是习惯性的,还是在更大的问题上造成了问题?不然呢?

谁能告诉我这件事..。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-09 21:29:36

C++有一个名为“一个定义规则”的规则,它规定每个函数只需要定义一次,而且只需要定义一次(这个规则有几个例外,但我们现在将忽略它们)。通常包含在头文件中的函数原型是声明函数存在的声明,.cpp文件中的实现是给出函数代码的定义。

如果将函数的定义放在头文件中,然后将头文件包含在多个位置,则会得到链接器错误,因为您违反了一个定义规则--每个已编译的.cpp文件都将有它自己的函数定义副本。另一方面,如果您只是将声明放在头文件中,然后将定义放在一个源文件中,那么只有一个定义,没有什么会中断。

一个定义规则有几个例外。首先,所有内联函数都不受ODR的限制,因此,如果标记所有函数inline,则可以将函数定义放入头文件中,尽管对于所有函数(最小的函数除外)来说,这通常都不是一个好主意。其次,模板函数不受ODR的约束,ODR(除其他外)是看到标头中定义的模板函数的原因之一。

票数 2
EN

Stack Overflow用户

发布于 2016-08-09 21:25:18

以功能体为例。然后,当您编写包含example.h的第二个.cpp文件并将其链接到example.cpp时,您将得到一个链接器错误。链接器将在example.h中看到函数的两个定义。

票数 1
EN

Stack Overflow用户

发布于 2016-08-09 21:24:54

因为在头文件中,您只声明在使用自定义链接配置时非常重要的函数。例如,如果在文件对象中定义了函数,并在另一个对象中使用函数,则链接器必须对此函数具有相同的引用才能链接这两个不同的文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38860642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档