2012-06-22 387 views
3

我有一個.c文件這樣的結構:Ç - 限制結構範圍

struct entry { 
    int position; 
    int length; 
    struct entry *node; 
}; 

現在,我怎麼能限制這種結構的範圍佈局到主機文件,這樣當使用同名的新結構佈局在另一個文件中,我沒有得到'重新定義'的錯誤?

我嘗試使用靜態結構,但似乎沒有用的(我也沒有意義)。順便說一句,this question似乎對我來說並不合適,因爲當跨鏈接文件(使用MinGW)複製影像條目時,我會得到'重新定義'錯誤。

---編輯---
對於那些想知道更多的人:here,和here

+0

當您嘗試編譯/鏈接您的程序 – unkulunkulu

+0

錯誤:重新定義「結構條目」時,能否顯示正在顯示的確切錯誤消息。這是因爲我將該文件包含到使用相同名稱的另一個文件中。看起來這是將設計與實現隔離的邏輯錯誤,其中翻譯單元只需要通過頭文件而不是直接進行通信。 –

回答

6

您不會得到重定義錯誤。類型爲翻譯單位,並且沒有任何可見性。只有函數和數據對象才具有可見性。

如果您收到重定義錯誤,您必須在標題或其他包含文件中使用該名稱,以便它以相同的翻譯單位結束。

+2

...或者包含具有該名稱的結構,聯合或枚舉的文件。 –

+0

這是我的問題:「如果你得到一個重定義錯誤,你必須在頭文件或其他包含文件中使用該名稱,以便它在同一個翻譯單元中結束。」 非常感謝。 –

+0

@ecatmur - 所以這是錯誤的:http://www.dmst.aueb.gr/dds/cscout/doc/name.html?它不會讓我感到震驚,但會讓我煩惱。我沒有一個C99標準,方便用戶仔細檢查。 –

2

這聽起來像你想有struct entry在不同的文件中意味着不同的東西。這很好:只需將用於定義每個版本的結構的代碼放入不同的.c文件中,並確保從不包含來自另一個c文件 的c文件或包含來自頭文件的c文件。

每個翻譯單元中只應該存在一個結構定義。