在C/C++
项目中,大多数文件的类型可以是.h
或.c
/.cpp
。除了它们的命名差异,例如头文件和实现文件;是否存在功能差异
换句话说:如果在一个工作的C/C++
项目中如果我们更改所有扩展名为.c
或.cpp
的文件,会有什么不同?
[注意:我们也可以为.c/.cpp
文件设置#include
保护。如果它们被观察为标头,我们可以跳过它们的编译。]
编辑:辩论不是为了这个,因为我没有任何可靠的用例。相反,我想知道,允许给予.h
、.hxx
、.i
扩展只是一种便利或规则。例如,我看到的一个功能差异是.cxx
文件可以有它们喜欢的对象文件。
它有什么区别?编译器对此非常满意。对它来说,这只是文件。
但对你来说?你做了很多不同:
- 您不再能够立即弄清楚哪一个是头,哪一个就是实现
- 您不能再为头和实现提供相同的名称
如果您使用的是gcc,并且您尝试编译一堆带有.C扩展名的C++文件,那么它将尝试像编译C语言文件一样编译您的文件,这将产生大量错误。
还有项目的合理性。。。这就是为什么很多时候你会看到项目实际上将C++标头标记为.hpp而不仅仅是.h,这样就更容易区分C语言源代码和标头,以及C++源代码和标题。
头文件通常不能直接编译,而是#包含在直接编译的文件中。通过给这两组文件提供自己的扩展名,可以更容易地确定要编译的文件。
Make和IDE以及其他工具通常期望源代码使用.c/.cpp,头文件使用h/hpp。编译器通常更进一步,对于.C默认为C编译,对于.cpp 默认为C++编译
所以,给头文件提供和源文件相同的扩展名是个坏主意。