簡體   English   中英

C ++代碼編譯時不包含

[英]C++ code compiles without include

為什么我不需要包括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而不是global system 僅保證<c*>頭中的函數在std名稱空間中(另一方面,全局函數在<*.h>頭中)。

我正在使用MS Visual Studio 2012,在其中,< iostream>包括<istream> ,其中<ostream>包括<ios>包括<xlocnum> <xlocnum>包含<cstdlib> ,因此您的程序間接包含<cstdlib>

盡管include的順序在其他編譯器和/或實現中可能有所不同,但是運行此代碼的原因是<iostream> ,直接或間接包括<cstdlib>

應當注意, iostream包含的庫是特定於實現的,並且代碼可能無法在其他編譯器中編譯。 通常,頭文件包含的庫通常沒有充分說明或標准的一部分,因此不要依賴間接包含。 如果您需要一個庫,則直接將其包括在內,並且由於標准庫包括了受保護的庫,因此不會對程序的編譯或運行時造成任何重大開銷

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM