簡體   English   中英

C ++編譯器是否會優化未使用的#include?

[英]Does C++ compiler optimize out #includes that are not used?

在構建不斷增長的類/函數庫時,我通常會看到一種“傘”頭文件,其中包含項目的所有常見頭文件。 例如:

dsp.h
#include "file1.h"
#include "file2.h"
...
#include "filex.h"

有時我可能需要所有東西,但其他時候可能只選擇了一些功能/選項。 例如,如果#include dsp.h但不使用file2.h中的任何內容,則編譯器知道嗎? 是否有可能在構建中對其進行優化?

否則,我的解決方案是將可選代碼包裝在預處理器指令中,然后定義我需要的代碼。 也許這是一個更安全,更有效的解決方案?

您是在談論代碼優化還是構建時間優化?

不必要的,未使用的標頭不會更改正在生成的代碼,因此這里沒有優化的問題。

但是,這將增加構建時間。 生成工具未對此進行優化。 如果您想優化構建時間,請參閱John Lakos撰寫的《 大規模C ++軟件設計 》一書。

預處理器不做任何優化。 它對代碼的語義一無所知,因此無法判斷是否正在使用頭文件中的任何內容。 因此,不, #include語句未進行優化。

由於預處理器是與C ++編譯器分開的程序(和語言),因此預處理器無法知道使用了什么。 因此,編譯器將接收頭文件中的所有內容。

在編譯器真正開始生成代碼之前,將讀取包含文件並將它們插入源代碼的一部分。

是。 通常,程序未引用的內容不會放入最終的可執行文件中。 可以認為這是一種優化。 詳細信息將取決於編譯器和鏈接器。

暫無
暫無

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

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