为什么我不需要包含 cstdlib 以及如何禁用它?我在 Windows 7 上使用带有 GCC 编译器的 Code::Blocks。
#include <iostream>
using std::cout;
using std::endl;
int main()
{
cout << "Hello" << endl;
system("pause");
return 0;
}
为什么我不需要包含 cstdlib 以及如何禁用它?我在 Windows 7 上使用带有 GCC 编译器的 Code::Blocks。
#include <iostream>
using std::cout;
using std::endl;
int main()
{
cout << "Hello" << endl;
system("pause");
return 0;
}
您不需要包含<cstdlib>
,因为它(或包含 的部分system()
)已包含在<iostream>
. 未指定标准头文件是否包含其他(标准)头文件。您不能禁用此行为,但应注意它以避免不同标准库实现之间的可移植性问题。
你不应该依赖这种行为并包括<cstdlib>
你自己。您还应该使用std::system
而不是全局system
. 头文件中的函数<c*>
只保证在std
命名空间中(另一方面,全局函数在头文件中<*.h>
)。
我正在使用 MS Visual Studio 2012 并在其中 <iostream>
包括<istream>
which includes <ostream>
which includes <ios>
which includes <xlocnum>
。<xlocnum>
包括<cstdlib>
,所以你的程序间接包括<cstdlib>
尽管在其他编译器和/或实现中包含的顺序可能不同,但此代码运行的原因<iostream>
是 直接或间接包含<cstdlib>
。
应该注意的是,iostream
包含的库是特定于实现的,代码可能无法在其他编译器中编译。作为一般规则,头文件包含的库通常没有很好的文档记录或标准的一部分,因此不要依赖间接包含。如果您需要一个库,请直接包含它,并且由于标准库是包含保护的,因此不会对程序的编译或运行时造成重大开销。