怎麼解決標頭檔案重複包含的問題,關於標頭檔案重複包含問題

時間 2021-12-26 05:30:53

1樓:匿名使用者

不是很明白你的問題。層層包含出什麼問題了?

通常標頭檔案定義都會加上一些預編譯指令,讓標頭檔案在被多個檔案引用的時候不會多次編譯。比如classa.h裡面可以寫:

#ifndef _classa_h_

#define _classa_h_

// source code here

#endif //_classa_h_

或者直接使用#pragma once 指令

關於標頭檔案重複包含問題

2樓:匿名使用者

從問題補充來看應該是預處理上的順序問題.標頭檔案相互包含總會有一個檔案在另一個檔案中被忽略.因為預處理時include是將包含的檔案中的**插入到當前**裡,檔案是不能包含自己的,如果相互包含編譯器只能取捨一下,否則是不可能正常通過的.

在a.h中和在b.h中#include c.h, 在才c.h中include a.h和b.h,這樣的邏輯關係本來就有問題.

如果a.h被首先處理,那麼c.h中的a.h的內容很可能是被忽略了,這就導致了c.cpp找不到a的宣告.

解決方法就是重新分配定義所在的檔案,儘量讓包含關係呈樹狀結構,迴圈結構很容易出錯.

如果a,b中需要引用c,而c中又要引用ab,最好的做法就是都放到一個檔案裡,或者只將abc的宣告寫到一個總宣告檔案,再將abc的定義寫到一個檔案或者分別寫到對應的檔案,然後再在定義檔案裡包含總宣告檔案,如:

--------------------

public.h :

class a;

class b;

class c;

--------------------

a.h :

#include "public.h"

class a

--------------------

*********************************************

使用#ifndef

比如在head1.h裡用#ifndef套住要宣告的東西:

#ifndef head1_h

#define head1_h

//宣告的內容

#endif

這樣當標頭檔案被重複包含的時候會自動跳過.

3樓:匿名使用者

使用以下結構

#ifndef xx

#define xx

#endif

4樓:匿名使用者

使用#ifndef

#ifndef a_h

#define a_h

//a.h中宣告的內容

#endif

在c/c++中如何避免標頭檔案被多次包含?

5樓:米莫的菜

標頭檔案的最開始

加入這條雜注,就能夠保證標頭檔案只被編譯一次。

#pragma once是編譯器相關的

,就是說即使這個編譯系統上有效,但在其他編譯系統也不一定可以,不過現在基本上已經是每個編譯器都有這個雜注了。

#ifndef,#define,#endif是c/c++語言中的巨集定義,通過巨集定義避免檔案多次編譯。所以在所有支援c++語言的編譯器上都是有效的,如果寫的程式要跨平臺,最好使用這種方式具體寫法方式一:#ifndef __somefile_h__

#define __somefile_h__

... // 一些宣告語句#endif方式二:#pragma once

... ... // 一些宣告語句比較#ifndef的方式依賴於巨集名字不能衝突,這不光可以保證同一個檔案不會被包含多次,也能保證內容完全相同的兩個檔案不會被不小心同時包含。

當然,缺點就是如果不同標頭檔案的巨集名不小心“撞車”,可能就會導致標頭檔案明明存在,編譯器卻硬說找不到宣告的狀況

#pragma once則由編譯器提供保證:同一個檔案不會被包含多次。

注意這裡所說的“同一個檔案”是指物理上的一個檔案,而不是指內容相同的兩個檔案

。帶來的好處是,你不必再費勁想個巨集名了,當然也就不會出現巨集名碰撞引發的奇怪問題。對應的缺點就是如果某個標頭檔案有多份拷貝,本方法不能保證他們不被重複包含。

當然,相比巨集名碰撞引發的“找不到宣告”的問題,重複包含更容易被發現並修正。

方式一由語言支援所以移植性好,方式二 可以避免名字衝突

我還看到一種用法是把兩者放在一起的:

#pragma once

#ifndef __somefile_h__

... ... // 一些宣告語句#endif看起來似乎是想兼有兩者的優點。

在使用CCS3 3時,新增的標頭檔案包含在ument裡

ccs3.3新增標頭檔案,被新增到document裡頭去,注意,ccs3.3是不需要手工新增.h的檔案的,只要在檔案中include了標頭檔案,ccs會自動搜尋標頭檔案並且新增到include資料夾中去,搜尋路徑 project build options compiler processer in...

電腦上有許多重複的檔案,怎麼刪除重複的檔案好

白鷺丹楓 電腦上有許多重複的檔案,這些東西檔案多了,不但不方便管理,而且還佔用大量空間。刪除重複檔案,可以藉助一款軟體 duplicate cleaner free。方法 步驟 可以定義規則,內容相同,還是檔名相同相似等 2 設定好規則後,接下來就要填加要查詢的資料夾了,選擇掃描位置,新增要查詢的資...

怎麼解決工作檔案的問題

大大的 解決方法如下 1 檔案的官方叫法是人事檔案,沒有學生檔案和工作檔案的區別,你手裡的學生檔案其實就是人事檔案。中專及以上學歷就讀時,由學校負責建檔,畢業後該檔案會轉出到相應的人事管理部門。你的檔案不應放在自己手上,會為以後造成不必要的麻煩。2 如果大學畢業的,應該到人才交流中心辦理檔案掛靠 如...