我所有的頭文件中使用包括警衛以及編譯一次:「#pragma once」是否有可能導致錯誤?
#pragma once
#ifndef FILE_NAME_H
#define FILE_NAME_H
class foo
{
//foo interface..
};
#endif /* FILE_NAME_H */
我明白編譯一次不標準,可能是不一樣的跨編譯器,但沒有任何它會導致錯誤嗎? 以某種方式測試它是否首先可用會更好嗎?
#ifdef THIS_COMPILER_SUPPORTS_PRAGMA_ONCE
#pragma once
#endif
#ifndef FILE_NAME_H
#define FILE_NAME_H
class foo
{
//foo interface..
};
#endif /* FILE_NAME_H */
我想提供編譯一次作爲一個選項可能加速編譯和避免名稱爭食,同時還跨越編譯器提供兼容性。
我真的不知道C/C++,但[這MSDN文章(http://msdn.microsoft.com/en-us/library/d9x1s805%28v=vs.71%29.aspx )似乎表明未被認出的人被忽略。 – Ryan
[Is #pragma once a safe include guard?]的可能重複(http://stackoverflow.com/questions/787533/is-pragma-once-a-safe-include-guard) –
另請參見[爲什麼不是C/C++的#pragma曾經是ISO標準嗎?](http://stackoverflow.com/questions/1695807/why-isnt-c-cs-pragma-once-an-iso-standard) –