c 能否把所有要用的標頭檔案在某乙個標頭檔案中全inlcude了,然後其他檔案只用include這個

時間 2021-05-29 22:46:09

1樓:qugx0528

每個cpp都是乙個編譯單元,編譯時生成多個obj檔案,在link的時候,也會極大的拖慢速度。有這麼一種情況,我有乙個很大的UI介面,其對應的實現/操作類也很龐大,我想把他們分解到多個cpp實現中。這樣就產生了這麼乙個問題:

代表ui的標頭檔案會在每個cpp中被include一次,這樣就很大程度上降低了編譯速度,我該怎麼辦呢,求大神指教!

2樓:長久千晴

有乙個東西叫做#include,但缺點在於容易變數跟函式重名。。建議還是分開寫

3樓:孫主任

優雅不優雅什麼的先不說了,你那個標頭檔案改一行,整個工程裡所有include這個標頭檔案的檔案全部重新編譯一次,是不是有點太過酸爽

4樓:靈劍

一般不會這麼做,如果這種標頭檔案存在,那也是對外提供的,比如說這個庫叫做myliba,那麼可能有乙個myliba.h,用來包含所有的常用功能(就跟一樣),但是內部不會這麼做,除了拖慢編譯沒啥好處。

標頭檔案是不可以迴圈引用的,我們來舉個例子:

// a.h

#pragma once

#ifndef __A__H

#define __A__H

#include

"b.h"

struct

A{};

intfun_b(B

*);#endif

//__A__H

// b.h

#pragma once

#ifndef __B__H

#define __B__H

#include

"a.h"

struct

B{};

intfun_a(A

*);#endif

//__B__H

實際include A的時候會發生什麼呢?

#ifndef __A__H

//ndef

#define __A__H

// b.h

#ifndef __B__H

//ndef

#define __B__H

// a.h

#ifndef __A__H

//already defined, invalid#define __A__H

#include

"b.h"

struct

A{};

intfun_b(B

*);#endif

//__A__H

struct

B{};

intfun_a(A

*);#endif

//__B__H

struct

A{};

intfun_b(B

*);#endif

//__A__H

b.h當中include的a.h,因為已經#ifndef __A__H返回了false,所以整個檔案被跳過了,這樣int fun_a(A*);中的A*就沒有定義了。

5樓:馬之人

如果是第三方庫,或者你對外提供介面,有可能可以這樣搞。

但是你自己工程內部,是不可能的。.h 互相依賴,一會就都成麻花了。不只是沒自動補全,還編譯不過。

寫程式要清晰、明確、簡潔,任何一點不明確、混亂或者偷懶,到最後你都會付出更大的代價。

6樓:張瑯小強

我記得C++有個頭檔案叫bits/stdc++.h,他將所有C++標頭檔案都包進來了。

當然,從理論上來說,你確實是可以寫乙個include了所有檔案的檔案,再include它。但是,這有什麼用處嗎?這樣死板地引用所有的檔案倒不如複製貼上。

7樓:江戶川兒

只有乙個總標頭檔案,預編譯的時候所有.cpp的include該檔案的語句會被替換成該檔案內容,這會導致只要你修改了其中乙個.h檔案所有的.

cpp都被修改了,這樣所有的.cpp都要重新編譯成.obj,然後所有的.

obj再連線起來。小工程可能感覺不出來,大工程慢哭你。

8樓:fullsail

前面幾位的答案過於武斷。

如果你採用預編譯標頭檔案加快編譯的措施措施。

工程外部的標頭檔案,全部放入乙個.h檔案中包含include,這個方法起始頂好的。可以大大加快速度。

當然乙個工程內部這樣幹,你C++是體育老師教的把。

9樓:Kent Zhang

1、沒有自動補全你就不會寫程式了麼?Xcode裡面你試試先兩個""然後移到中間Hea看有沒有自動補全嘛

2、Header這個命名太糟糕了。你可以參考下Qt的標頭檔案。Qt的標頭檔案也是乙個引用多個,不過分類清晰命名明白。

10樓:徐波

標頭檔案還好, 只要上預編譯頭, 其實是蠻快的. 但僅限於不修改或者少修改的底層.

常用的還是乖乖的用多少, 引多少吧, 這樣能達到編譯的最優

標頭檔案不算啥, 我見過把cpp用include全部整到1個檔案裡的. windows下無所謂. 上了安卓NDK要出問題..整死人...

11樓:藍色

很多人都批評了這樣的做法。我想說的是對於C++的組織結構,我們大部分都關注在了C++的邏輯結構組織設計,如namespace, class, function的組織,卻往往忽視了C++的標頭檔案,原始檔等物理結構組織設計,推薦樓主去讀讀《大規模C++程式設計》這本書,雖然有點兒老,但是是為數不多的關注C++物理結構組織的一本書。

12樓:

如果include的標頭檔案都是不需要修改的標頭檔案,比如windows,庫標頭檔案,然後使用預編譯標頭檔案,是值得推薦的,vc自己也這麼幹的。

如果標頭檔案是自己寫的,需要頻繁修改,那每次修改都會導致重編譯,是必須要唾棄的。

13樓:陳聰寧

先把常用的標頭檔案分類,然後寫乙個標頭檔案包含進去,嗯,我就是這麼幹的。乙個Model.h,包含 Cat.

h,Dog.h,等等。然後之前乙個.

m檔案有幾十個import,現在基本不會了。原諒我不知道有什麼更好的辦法處理。

ps,pch檔案也有使用,包含的是第三方庫的標頭檔案。

補充一下,因為有個網路處理類是專門負責從網路載入Cat, Dog資料下來,所以這樣處理會方便很多。外面的類只需要用到Cat的話,直接import cat.h 就夠了。

14樓:Ying Zhong

PCH能滿足你,不過這個東西在Xcode 6以後就取消自動新增了,你可以手動新增。

關於取消的原因可以參考:http://

能否說「德日在二戰爆發前的某一年就已經決定了其必輸的結局」?

藍色多瑙綠色萊茵 那些說歷史什麼必定一定的都是錯的,歷史本就是由許多偶然因素構成的,根本沒有必定一說。就比如七年戰爭中腓特烈的普魯士當時單挑法奧俄三個列強三面作戰,在現在看來不是必輸嗎?不是作死嗎?然而事實呢? 從心開始 小國打大國失敗從來就是必然結局,當然除了那些你知道的有大哥在後面撐腰的。另外小...

如果世界上所有正運動著的分子在某一時刻突然停止運動,世界會發生什麼樣的變化?

Huhu是個小胖幾 馬原上告訴我們世界是運動的,物質的根本屬性就是運動,靜止是一種特殊的運動所以是必須要運動不能不運動的乛乛在社會主義國家馬克思的理論肯定沒錯y lzgan826 首先世界上所有分子不可能停止運動,所有分子與周圍分子通過電磁場相互連系,永選不會停止運動。如果所有分子停止運動,宇宙體積...

在資金充裕的情況下,能否打造一把效能吊打hk416的ar15呢

ChipsetS 說效能是指什麼方面呢。重量的話HK416算是比較離譜的了,10.5寸短管全槍重量都快趕上20寸A2管的AR15了。槍管這個,現如今冷鍛管滿地爬的大環境下其實真沒什麼區別,管型來講A2管型確實是個雞肋,但打精度的話民用也還有一堆鉛筆管可以選啊。話說AR15本身也有不少可選的短活塞的u...