(我正在談論C,但它也適用於C++中的類模板)爲什麼結構定義有內部聯繫?
在頭文件中,放置所有聲明,而不是定義是自定義的。但是,我們通常會將結構定義或類模板放在頭文件中,而實際上並不知道爲什麼可以。這並沒有什麼意義,因爲它們也是定義 - 一個定義規則。 (是的,結構定義和類模板不會導致任何存儲設置,但您仍然會得到「重定義」錯誤,低於此錯誤意味着它們是定義)。在相同的文件中定義多個具有相同標記的結構給你一個重定義錯誤,但是在多個源文件中定義具有相同標記的多個結構不會導致任何錯誤(同樣的事情發生在類中)。
唯一有意義的是結構定義和類模板具有內部鏈接(與默認的外部鏈接相對),但是我無法在K & R或參考手冊中找到任何關於它的參考。事實上,連結中甚至沒有提到結構。
我想知道ANSI標準指出這個現象的確切參考。 (國際海事組織,這是一個非常模糊的東西,有必要在ANSI標準中提到)。
編輯 我不問爲什麼結構定義可以被放入頭文件。
我問爲什麼把結構定義在頭文件中,當我們把在頭文件變量定義(並將其包含在多個源文件)
EX) test1.c像它不會導致重新定義錯誤:int a = 3; test2.c:int a = 4; 由於重新定義而導致編譯錯誤。但是,
test1.c:struct test {int a}; test2.c:struct test {int b}; 不會導致編譯錯誤,我能想出的唯一原因是 結構定義或者有內部鏈接,或者根本沒有鏈接。
什麼是 「內部」 鏈接 - 你的意思是 「靜態」? –
內部鏈接定義在http://publications.gbdirect.co.uk/c_book/chapter8/declarations_and_definitions.html – SHH
標準C具有「暫定義」的概念。嘗試在K&R或參考手冊中查找。 – pmg