簡體   English   中英

#包括 <iostream> 在多個文件中

[英]#include <iostream> in multiple files

我希望這個網站以前沒有問過這個問題。 我無法從Google找到可靠的答案。

當您在項目的多個文件中包含iostream時,會發生什么情況? 我總是在頭文件中使用#ifndef和#define。 這是否會阻止iostream被多次包含?

我對此問題有兩種解釋:

  1. 您可以在同一編譯單元中多次包含iostream嗎?
    • 是的,安全。 所有標准標頭都有防護裝置,以便安全地使用此標頭。
  2. 在代碼中使用包含保護自己會阻止iostream被多次包含嗎?
    • 當然,它還可以防止#ifndef#endif之間(或在標有#pragma once的標頭中,在支持它的編譯器中)之間的所有內容被編譯器多次查看...這就是包含防護的內容對吧? 但這對於#include <iostream>並不是真正需要的,因為已經保護了它免受多個包含。

就像克里斯(Chris)和哈魯根(Haroogan)所說,是的,他們將防止這種情況發生。 #ifndef和#define是預處理程序指令,並且被英語翻譯為

#ifndef(如果未定義)

#定義(定義)

因此,如果您創建一個標頭,並兩次#include“ myheader.h”,則該文件將不會再次包含,因為您將其包含在if語句中,這將導致該文件僅在包含時才被包含(並定義)。尚未包含(定義)。

而不管。 即使使用ifndef您仍然嘗試多次包含它。 因為多個文件將被包含一次。 並嘗試包含<iostream>但是如果您打開<iostream>

#pragma once

這基本上意味着它只會被包含一次。 建議不要使用該方法避免我在行業中發現多個內容。 因為很難知道它不會再被包含。 與查看ifndef的頂部和底部相比。

#ifndef __IOSTREAM_H
#include <iostream>
#endif

...

似乎大多數標准標頭都具有上述的包含保護。

或者,您可以通過定義所需的宏來創建自己的包含保護。

暫無
暫無

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

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