2016-11-29 60 views
-1

基於由sbithis question答案,可以在單個cpp文件中多次使用函數聲明嗎?

標識符可以聲明爲經常只要你想(聲明1)

但是是不是真的,

C++中的include guard只是防止來自 的函數聲明在單個源文件(語句2)中顯示不止一次

我的問題是:爲什麼這個矛盾?或者我誤解了這兩種說法?

+0

不可以。包含防護功能可防止*頭*被多次包含。根據範圍的不同,標識符可以在無數文件或單個文件中聲明爲無限次數。 – user4581301

+0

必須保護類定義 – Danh

+0

稍微重讀一次,只要標識符的類型不變,範圍甚至可以忽略,因爲sbi正在說明聲明而不是定義。 – user4581301

回答

4

是的,您可以在單個翻譯單元中多次聲明(但不是定義)函數。是的,包括警衛通常會阻止這一點,但這不是他們唯一的目的。標題通常定義類,模板和內聯函數;需要頭部防護以防止這些實體的多個定義出現在單個翻譯單元中。標題保護還有助於防止將標題粘貼到翻譯單元中的次數呈指數式放大。

+0

你是否暗示''guard guard'基本上可以防止重複的定義,而不是聲明,只有前者會觸發錯誤?我仍然有點困惑。我正在考慮像'#include「.h」'在預處理期間從頭文件中直接複製和粘貼內容,因此具有'#include「.h」'的源文件在預處理後將不會有任何定義由於我們通常在一個單獨的* cpp *文件中定義實體(以及它在頭部的聲明),因此翻譯單元如何具有實體的多個定義? – Nicholas

+0

@Nicholas包含守衛防止在翻譯單元中出現多次警衛。這可能包括:非內聯函數聲明,內聯函數定義,類定義,模板定義。還有其他類型的聲明,但這些是最重要的情況。 – Brian

+0

「這不是他們唯一的目的」 - 對。但它比這更強大:如果你的頭文件只包含**聲明,那麼根本不需要包含守衛。這是所有其他的東西,必須保護。 –

相關問題