我最近开始从基础知识中学习cpp,并且与下面的内容非常混淆:
假设我有一个标题(test.h
只包含声明),包含一些内容和一些源文件(source.cpp
),程序产生了一些结果。
如果我已将该头文件的相同内容复制到.cpp文件(testcpp.cpp
)并将其包含在source.cpp
在这种情况下,我不明白它有什么不同?
(我不会在make文件中包含此testcpp.cpp
)
我见过一些与此类似的线索,但无法明白!!!
我学习了header和cpp文件的用法,并且在项目中使用它到现在为止,请具体回答这个场景(我知道这样做会增加混乱但只是想知道)。这样做会有什么不同吗,或者只是每个人都遵循的常见做法?
答案 0 :(得分:3)
它什么都没改变。这只是一个约定,你是否使用* .h或* .cpp或* .asdasd后缀,只要它不能自己编译。
有些项目对头文件使用.hxx扩展名,对源文件使用.cc扩展名。
请为了您的合作伙伴的利益,坚持常见的约定,不要将标题代码放在.cpp文件中。
答案 1 :(得分:3)
它有什么不同?
头文件的扩展名对任何内容都没有影响。您可以将文件命名为test.mpg
,.test
或仅test
(显然更改include指令),它也可以正常工作。扩展是为了程序员的利益,而不是工具链。
但是,除了.h,.hpp或其他任何约定之外,命名它是一个坏主意。如果你将其命名为.mpg,人们会认为它是一个视频,并没有意识到它是一个头文件,试着在媒体播放器中播放它。如果你将它命名为.cpp,人们会认为它是一个源文件,可能会尝试编译它或者可能会在其中添加定义。
在预处理器中包含文件在技术上只是将一个文件的内容复制到另一个文件中。没有更多,也没有更少。关于他们的其他一切都只是惯例。
在makefile中,指定源文件时,我可以为源文件提供任何扩展名(.fsfs,.xxx)而不是.cpp扩展名
技术上是的,但编译器通常使用源文件扩展名来检测在这种情况下他们将无法执行的语言,因此您必须明确指定它。
答案 2 :(得分:2)
#include
只是将您包含的文件复制粘贴到当前文件中。文件命名的内容并不重要 - 您可以将其命名为" foo.exe"如果你喜欢;只要它包含在包含它的上下文中的有效源代码一切都很好(但请不要使用非常规名称,你只会让人混淆)。