1.I看到很多地方,頭警衛和編譯一次使用起來太在一個特定的順序(沒有順序居然有關係嗎?)頭警衛和編譯一次
2.Also另一個疑問是默認每當VS IDE生成一個新的類文件時,它就會將#pragma放到實現文件(.cpp)中一次。這真的需要嗎?
#ifndef MYHEADER_H
#define MYHEADER_H
#pragma once
//my set of includes
這是正確的標題守衛或阻止多個包含物的方式嗎?
1.I看到很多地方,頭警衛和編譯一次使用起來太在一個特定的順序(沒有順序居然有關係嗎?)頭警衛和編譯一次
2.Also另一個疑問是默認每當VS IDE生成一個新的類文件時,它就會將#pragma放到實現文件(.cpp)中一次。這真的需要嗎?
#ifndef MYHEADER_H
#define MYHEADER_H
#pragma once
//my set of includes
這是正確的標題守衛或阻止多個包含物的方式嗎?
#pragma once
儘管得到了許多流行的編譯器/預處理器的支持,但它並不是標準的。請參閱Is #pragma once a safe include guard?
#ifndef MYHEADER_H
#define MYHEADER_H
#endif // ndef MYHEADER_H
保證可以與所有C++編譯器/預處理器一起使用。
沒有必要同時使用兩者。
「#pragma once」是編譯器特有的,可能不是可移植的。 「#ifndef/#define/#endif」更具可移植性,適用於所有預處理器。
那麼這是否意味着添加兩者的好習慣?我不能說明爲什麼兩個都用在代碼中?如果還看到#pragma或者編譯器優化會消除#define,它是否會給出任何額外的編譯優化? – surega 2013-02-15 21:35:25
我做了#pragma一次,幷包括警衛。我從來沒有比較過#pragma與包括守衛的表現,但我可以想象,在#pragma之後中止解析比尋找#endif更快。 – 2013-02-18 18:27:26
#pragma once
與包括衛兵是一樣的,但它不是標準。它做同樣的事情,但一些編譯器將編譯包含此指令的更快的文件。
它將被不支持它的編譯器忽略。
因此,既可以確保代碼的可移植性,又可以更快地編譯。
爲了獲得它的好處,如果還有任何(@jalf),我想你必須先擁有它。 – ChiefTwoPencils 2013-02-15 21:38:20
另請參見[爲什麼C/C++的「#pragma once」是ISO標準?](http://stackoverflow.com/questions/1695807/why-isnt-c-cs-pragma-once-an-iso-標準?rq = 1) – 2013-02-15 21:43:26