簡體   English   中英

在#ifndef中包裝#includes - 添加任何值?

[英]Wrapping #includes in #ifndef's - adds any value?

我繼承了C / C ++代碼庫,並且在許多.cpp文件中, #include指令包含在#ifndef中,頭文件內部包含#define

例如

#ifndef _INC_WINDOWS
#include <windows.h>
#endif

和windows.h看起來像

#ifndef _INC_WINDOWS
#define _INC_WINDOWS
...header file stuff....
#endif // _INC_WINDOWS

我假設這樣做是為了加快代碼的編譯/預處理。

我認為它很丑陋並且過早優化,但由於項目從清潔開始有5分鍾的構建時間,我不想讓事情變得更糟。

那么這種做法是否會增加任何價值或加快速度? 清理它們可以嗎?

更新:編譯器是MSVC(VS2005),平台是Win32 / WinCE

值得知道的是,某些實現具有#pragma once和/或header-include-guard檢測優化,並且在這兩種情況下預處理器將自動跳過打開,讀取或處理之前包含的頭文件。

所以在包括MSVC和GCC在內的那些編譯器上,這種“優化”是沒有意義的,並且應該是頭文件負責處理多個包含。 但是,這可能是#include效率非常低的編譯器的優化。 代碼在病理上是否可移植,而<windows.h>不是<windows.h>名的Win32頭文件,而是指某個用戶定義的同名頭文件?

頭文件也可能沒有多包含保護,並且這種檢查實際上是必不可少的。 在這種情況下,我建議更改標題。 標題的整個點可以替代關於該地點的復制和粘貼代碼:它不應該包含三行來包含標題。

編輯:

既然你說你只關心MSVC,我會:

  • 做一個大規模編輯,為構建時間只是為了確保以前的程序員不知道我不知道的事情。 如果它有幫助,可以添加#pragma once 使用預編譯的頭文件,如果這一切真的減慢了速度。
  • 忽略它,但不要將防護用於新文件或添加到舊文件的新#include

取決於我是否有更重要的事情需要擔心。 這是一個經典的周五下午的工作,我不會花費潛在的生產時間;-)

如果包含文件,則必須讀取整個文件,甚至打開/關閉文件的開銷可能很大。 通過在include語句周圍放置保護指令,它永遠不必打開。 一如既往地提出這些問題,正確的答案是:嘗試取出圍繞include指令的ifndef / endif守衛並獲取秒表......

暫無
暫無

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

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