C++中各种⽂件后缀名的区别
转⾃:
.c 与 .cc 与 .cpp 与 .hpp 与 .h 与 .cxx后缀名源⽂件,到底有什么区别?
很多C语⾔学习者多多少少也会了解⼀些C++的语法,应该能够发现,C语⾔和C++程序源⽂件的后缀名是不同的——C语⾔程序源⽂件后缀名为“.c”,⽽C++程序源⽂件后缀名⼀般为“.cpp”,“.h”后缀名则常常是头⽂件的后缀名。
可是,在程序开发,或者⼀些开源项⽬中,我们还常会看到⼀些后缀名为“.hpp”,".cc",“.cxx”的源⽂件,让⼈很迷惑,这些不同后缀名的源⽂件到底有什么不同呢?以及,这些后缀名是怎么产⽣的呢?
多样的源⽂件后缀名
事实上,在⼀开始,C++程序的源⽂件后缀名也是“.c”和“.h”,这与C语⾔程序源⽂件的后缀名完全⼀样。这就带来了⼀些问题,其中⼀个⽐较显著的问题就是编译器⽆法轻松的区分某个源⽂件⾥的程序究竟是使⽤C++编写的,还是C语⾔编写的。
因此,后来C++程序源⽂件的后缀名不再使⽤“.c”了,有些使⽤“.C”后缀名以区别于C语⾔程序,还有些C++源⽂件则使
⽤“.c++”,“.cc”,“.cxx”作为后缀名。
不过,由于“.C”与“.c++”后缀名的适⽤性不够⼴,⽐如有的编译器不区分后缀名的⼤⼩写,以及有些系统不⽀持⽂件名使⽤“+”符号,这两种后缀名的C++源⽂件越来越少了。
Dos 和 Windows 系统的编译器偏向使⽤“.cpp”(c plus plus, c++)作为 C++ 源⽂件的后缀名,考虑到 Windows 系统的市场占有率极⾼,因此为了统⼀性,以“.cpp”作为源⽂件后缀名的C++程序项⽬相当多。
再来看头⽂件,基本上和源⽂件的历史⼀致,曾经出现过后缀名为“.H”,“.h++”,".h"以及“.hxx”和“.hpp”的头⽂件。但是,与源⽂件不太⼀样的时,今天仍然有许多C++程序仍然使⽤“.h”后缀名的头⽂件。
相信读者在⼀些“.h”后缀名的头⽂件⾥见到过下⾯这样的宏控制命令:
#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif
基本上,这样的头⽂件既可以被C语⾔程序包含,⼜可以被C++程序包含。有时,有些头⽂件不知道⾃⼰是否可以被包含在C语⾔程序的上下⽂中,甚⾄连后缀名都没有。
其他
另外,有些程序项⽬的源⽂件使⽤“.ii”,".ixx",“.ipp”作为后缀名,这类⽂件⼀般专⽤于提供内敛定义。还有些源⽂件使
⽤“.txx”,“.tpp”,“.tpl” 作为后缀名,⽤于定义模板。这些源⽂件⼀般会被包含在头⽂件⾥,或者直接包含在程序项⽬的上下⽂中。
编译器和⼯具通常并不关⼼源⽂件的后缀名,不过在默认状态下,编译器和⼯具会根据源⽂件的后缀名识别出代码就是是C语⾔还是C++语⾔,还是其他编程语⾔编写的。
换句话说,如果编译器能够识别“.cpp”和“.cc”后缀名的源⽂件,那么使⽤哪⼀个都是可以的,因为它们都能告诉编译器该源⽂件代码是由C++语⾔编写的。
⼩结
c语言和c++区别本节讨论了⼏种在程序开发中常见的源⽂件后缀名,可见,它们其实并⽆太多含义。如果不会造成歧义,甚⾄可以任意使⽤这些后缀名。不过,⽐较推荐的做法是在项⽬中保持统⼀,如果其他C++源⽂件都是以“.cc”作为后缀名的,那么我们新定义的C++源⽂件要是使
⽤“.cpp”源⽂件就不是很好了。