C ++代码编译时没有包含

时间:2013-09-29 09:30:06

标签: c++ gcc codeblocks

为什么我不需要包含cstdlib,如何禁用它?我在Windows 7上使用Code :: Blocks with GCC编译器。

#include <iostream>

using std::cout;
using std::endl;

int main()
{
    cout << "Hello" << endl;

    system("pause");
    return 0;
}

2 个答案:

答案 0 :(得分:7)

您不需要包含<cstdlib>,因为system()包含<iostream>(或其中包含<cstdlib>的部分内容)。未指定标准标头是否包含或包含哪些其他(标准)标头。您无法禁用此行为,但应注意它以避免不同标准库实现之间的可移植性问题。

您不应该依赖此行为并自行添加std::system。您还应该使用system而不是全局<c*>std标头中的函数只能保证在<*.h>名称空间中(全局名称,另一方面,{{1}}标题中)。

答案 1 :(得分:4)

我正在使用MS Visual Studio 2012,其中&lt; iostream>包括<istream>,其中包含<ostream>,其中包含<ios>,其中包含<xlocnum><xlocnum>包含<cstdlib>,因此您的计划间接包含<cstdlib>

尽管其他编译器和/或实现中包含的顺序可能不同,但此代码运行的原因是<iostream>,直接或间接包含<cstdlib>

应该注意iostream包含的库是特定于实现的,并且代码可能无法在其他编译器中编译。作为一般规则,头文件包含的库通常没有详细记录或标准的一部分,因此不要依赖间接包含。如果您需要一个库,请直接包含它,并且由于标准库为include guarded,因此在您的程序编译或运行时不会产生重大overhead