2011-05-05 77 views

回答

1

标准头文件被调用,因为它们被定义为ANSI C/C++标准的一部分,所以它们对于所有符合ANSI的编译器都是相同的。

+1

“,所以它们将为符合标准的所有编译器提供相同的最终效果。” – 2011-05-05 19:32:25

3

它不是很清楚你在问什么,但是“标准”头文件只是它们(应该)符合C/C++标准(如管理机构规定的标准,例如ANSI等)的标准。 )

不同的编译器通常通过不同的实现来满足这些标准,至少当标准允许他们这样做时。

换句话说,您应该只依赖标准中指定的行为,因为具体的实现可能略有不同。

0

我希望我理解你的问题,但这里是我的。

与.cpp文件一起创建类的头文件(.h)是如何在C++中执行的操作。

对于大多数情况下,SomeClass.h将对该类进行原型化,而SomeClass.cpp将包含该类工作所需的代码。

如果由于某种原因GCC做了一些非常不同的编译工作,那么我不知道。我认为这对任何编译器都是一样的想法。

0

标准文件没有规定标准文件所需标准文件之外的标头文件的概念。但使用#include指定要导入的文件是。所以这是标准的,以及编译器搜索这些文件的一般顺序。在标准中规定了用于避免多重包含的方法,因为预处理器的行为已被很好地定义(虽然正如我所说的,标准没有说明你是否使用它们)。尽管如此,#pragma once不是标准的,因此使用它需要您自担风险。

+0

如果'#ifndef'实际上是由标准授权的话,会很好。特别是“强制”标识符使用的部分......“#ifndef BLAH”不是由标准规定的**。它恰好是解决多重包含问题的真正简单的解决方案,并且基本上被所有程序员采用。 – pmg 2011-05-05 19:34:46

+0

是的,我调整了一下我的措辞。在这种情况下,预处理器的行为是由标准强制的,因此标准的包括守卫将始终工作,但是包括守卫本身并没有被识别,据我所知。 – 2011-05-05 19:39:31

0

您可能会发现不同编译器套件之间的细微差异。但更重要的是,您可以在不同的平台上找到各种库和头文件。例如,GCC经常在POSIX系统上找到,所以无论何时预先定义__GNUC__,找到比如说<pthread.h>都是很常见的。这导致了假设性的代码如下所示:(但仍预计由不同的编译器版本引起的大多是一些琐碎的矛盾)

#ifdef __GNUC__ 
#include <pthread.h> 
#else 
#include <windows.h> 
#endif 

如果有疑问,有利于C++ Standard Library当使用C++和C Standard Library使用C.时

另外,测试您的代码在不同的系统上构建并运行。如果它使用Windows下的Visual Studio和Linux下的GCC,则可以确保将代码移植到其他系统是非常简单的。