2014-01-25 105 views
-1

我有文件f1.h包含的聲明等的數量龐大的線路 說我變typedef struct abc_t ABC;有沒有辦法爲extern類型定義變量

我希望自己能f2.cABC的大小,而不包括f1.h &效用函數,因爲我不希望在f2.c中需要的其他聲明f1.h不必要地增加二進制大小。我只需要sizeof ABC

  • 它的typedef變量,我們應該如何得到它的大小在f2.c
  • 有沒有什麼方法可以實現這一點?
+2

下,您需要知道一個變量的大小在什麼情況下翻譯單位無法訪問它或其類型?聽起來就像你想避免f2.c必須知道的那種事情。 –

+0

行'typedef struct abc_t ABC;'爲'struct abc_t'類型定義了一個別名'ABC'。它沒有定義該類型的變量。爲什麼'f1.h'包含如此大量的聲明以致於不願意包含它?把它分成小塊,也許留下一個只包含'#include「f1a.h」','#include「f1b.h」'的綜合'f1.h'。當然,這個部門應該是合乎邏輯的,大多數客戶端源文件應該包含一些特定的頭文件,而不是全部頭文件。這聽起來像是一種自我造成的傷口,可能是由漸變蠕變引起的。 –

+0

這種情況下,我在f1.h不屬於的情況下實施,它以前有大量的聲明行數。我同意我們不應該有這種不好的做法,如果是這樣,我應該在extern中存儲大小以反映另一個.c文件。完全同意我應該重新組織代碼,然後再做任何補充。謝謝。 –

回答

2

您可以簡單地聲明另一個變量來存儲大小。因此,在一些頭 - 不是f1.h - 你將有

extern unsigned size; 

而在f1.c您需要定義它

unsigned size = sizeof(<whatever type you want>) 
+0

Wojtek,你的建議如何幫助,說f1.h包含extern unsigned sizel; typedef struct abc_t ABC;在f1.c中#include「f1.h」unsigned size = sizeof(ABC);我想在不包含f1.h文件的情況下在f2.c中獲得sizeof(ABC)。有助於獲取struct的大小abc_t –

+0

如果您將大小不放在f1.h中,而是放在另一個頭中,比如f1size.h,它會有所幫助。那麼這個頭文件應該包含在f1.c和f2.c中。 –

+0

你的權利我得到你。驚訝以上評論以來如何增加,因爲我已經撤回它。謝謝Wojtek。 –

相關問題