2013-11-22 108 views

回答

5

這就是所謂的循環依賴,雖然這是可能的,你不應該。不惜一切代價避免圍繞這個概念進行設計。

你應該做的是從兩個頭提取共同點,創建第三個,這兩個include

bad   good 

a <---> b  a  b 
       |  | 
       -> c <- 

如果你發現你不能做到這一點,那麼最有可能ab是相同的語義單位,並在相同的標題歸屬。

3

很顯然,如果你這樣做,並沒有其他人做任何事情,你有一個無限長的文件作爲循環依賴保持包括其組成部分。

但很多人包括許多在C文件的,所以這樣的事情一定會發生。

輸入include guards。在每個(精心設計的)頭文件中,都必須有一種方法來確保你打破循環依賴。最常用的兩種方法使用不同的預編譯器宏:對於接受此操作的編譯器(現在大多數編譯器),它確保每個編譯僅包含一次頭文件。把它放在每個標題的頂部,你就可以。

的ifdef - 這樣的事情

#if !defined(__MY_HEADER_H__) 
#define __MY_HEADER_H__ 
/* all the code */ 
#endif 

你會看到包括在任何標準的頭警衛。

我喜歡uʍopǝpısdn的回答,但 - 如果它是您的代碼,盡你所能避免創建這種依賴關係。

0

我猜你應該能夠做到這一點,通過使用#ifndef

ial.h

#ifndef IAL_H 
#define IAL_H 

... 

#include "adt.h" 

... 

#endif 

adt.h

#ifndef ADT_H 
#define ADT_H 

... 

#include "ial.h" 

... 

#endif 

無論它是一個好主意或沒有,我會說不要這樣做。