我正在使用一个开源项目(Open Scene Graph)。我发现所有头文件名都是File
格式,我发现在某些网站中提到的是没有扩展名的文件。
我想知道为什么这些开发人员使用此扩展程序,而不是传统的.h
文件扩展名。
答案 0 :(得分:5)
您似乎在谈论C ++代码的this repository。
看起来该代码的作者决定遵循C ++标准库的模式。在标准C ++中,库头不应该具有.h
扩展名。所以以下是正确的:
#include <iostream>
大多数编写<iostream.h>
的实现也可以,但没有扩展名的版本实际上是正确的。由于引入了命名空间,并且为标准库引入了std
命名空间,C ++标准库能够在C ++ 98中删除扩展。
C ++标准既不要求也不禁止其他标题的扩展,所以它完全取决于某些软件的作者使用什么文件扩展名(如果有的话)。最常见的选择是使用.h
或.hpp
,后者旨在区分C ++标头和C标头。
快速浏览一下OpenSceneGraph代码,可以看出他们在其包含中遵循了C ++标准库模式。没有扩展,所有内容都在osg
命名空间中,类似于标准库的std
命名空间。因此,使用OpenSceneGraph库与使用C ++标准库非常相似。
#include <osg/Camera> // Provides osg::Camera
它的模式与:
相同#include <string> //Provides std::string
所以我认为OSG的作者想要遵循与C ++标准库相同的模式是安全的。我个人认为,拥有文件扩展名更好,即使只是为了能够搜索头文件。
答案 1 :(得分:0)
我邮寄给OpenSceneGraph的开发人员之一(Robert Osfield)。这是他的答案。
OSG采用与标准C ++标头相同的标头约定。 我们在标题中添加了一个 - -C ++ - - 字符串,以便编辑可以 用它来确定类型。
答案 2 :(得分:-1)
我所知道的是,C标准库已经采用了大多数名称。由于C ++必须与它共存,因此C ++标准库可能已经发展为没有其标题的扩展名。
请注意,这些标题中的某些标题可能具有相同的名称,但它们提供的功能可能相同或不相似。
#include<some.h> //this includes the header C library
#include<some> //this includes the header from the C++ standard library