6

cstdlib を含める必要がないのはなぜですか? また、これを無効にするにはどうすればよいですか? Windows 7 の GCC コンパイラで Code::Blocks を使用しています。

#include <iostream>

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

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

    system("pause");
    return 0;
}
4

2 に答える 2

7

<cstdlib>それ (または を含む部分system()) は によって含まれていたので、含める必要はありません<iostream>。その他の (標準) ヘッダーが標準ヘッダーに含まれているかどうか、またはどのヘッダーが含まれているかは指定されていません。この動作を無効にすることはできませんが、異なる標準ライブラリ実装間の移植性の問題を回避するために注意する必要があります。

この動作に依存して<cstdlib>自分自身を含める必要はありません。std::systemglobal の代わりにも使用する必要がありますsystem。ヘッダーからの関数は、名前空間<c*>にあることが保証されているだけですstd(一方、グローバルなものは<*.h>ヘッダーにあります)。

于 2013-09-29T09:38:28.953 に答える
3

私は MS Visual Studio 2012 を使用していiostream>ます。が含まれているため、プログラムに間接的に含まれています<istream><ostream><ios><xlocnum><xlocnum><cstdlib><cstdlib>

インクルードの順序は他のコンパイラや実装では異なる場合がありますが、このコードが実行される理由は<iostream>、直接的または間接的にインクルードするため<cstdlib>です。

iostream含まれるライブラリは実装固有のものであり、コードは他のコンパイラではコンパイルされない可能性があることに注意してください。原則として、ヘッダー ファイルに含まれるライブラリは通常、十分に文書化されていないか、標準の一部ではないため、間接的なインクルードに依存しないでください。ライブラリが必要な場合は、それを直接インクルードします。標準ライブラリはinclude guardedであるため、プログラムのコンパイルや実行時に大きなオーバーヘッドが発生することはありません。

于 2013-09-29T09:53:34.957 に答える