2012-04-23 21 views
2

我是C++的新手,開始像大多數人似乎要做的那樣組織代碼:在「頭文件」和「源文件」中。我在所有包含內聯函數的頭文件中使用了#pragma once。但我想知道是否有任何理由反對在每個頭文件中使用它?是否有一個很好的理由不在每個頭文件中使用#pragma一次?

+7

不,這個頭文件有特殊的語義,要求它被多次包含(例如,這在預處理器中是很常見的)。當然,還有一個問題是'#pragma once'在技術上不是便攜式的...... – ildjarn 2012-04-23 22:41:05

+3

可移植性將是唯一的問題。儘管大多數現代編譯器都支持它。 – 2012-04-23 22:57:49

+0

由於可移植性的原因,使用標頭警衛可能更好。當然還有更多的打字。 – parallelgeek 2012-04-23 23:07:23

回答

3

我在所有包含內聯函數

這是關於一個原因,你需要#PRAGMA一旦這些頭文件使用#pragma一次。對同一個內聯函數有多個定義是正常的和預期的。並且當多個翻譯單元不可避免地包含相同的標題時,特別是對於模板函數。如果編譯器沒有實際內聯函數,鏈接器只會選擇其中一個定義。您需要#pragma一次以避免同一類型的多個定義。

相關問題