2
這是從MISRA C MISRA有關規則16-0-2 ++ 2008年的指導方針米斯拉警告爲包括後衛
Macros shall only be #define'd or #undef'd in the global namespace.
我明白這個規則,但我polyspace MISRA檢查工具抱怨說,以下包括在年初宣佈後衛文件爲不合規。我猜如果這個文件本身被包含在另一個命名空間中,會發生這種情況,但是我的頭文件並不是這種情況。
什麼其他錯誤代碼可能會導致這個問題?
#ifndef FOO_H
#define FOO_H
... code etc ...
#endif
注: 實例米斯拉指導報價是
#ifndef MY_HDR
#define MY_HDR // Compliant
namespace NS
{
#define FOO // Non- Compliant
#undef FOO // Non-Compliant
}
#endif
這是一個奇怪的...規則,它不是因爲如果命名空間影響預處理器,但無論如何這使得它聽起來好像是這樣的話。 – unwind
@unwind我相信這是整個規則的要點。因此,開發人員不知道名稱空間與宏的交互不存在,因此不能假定該宏在名稱空間範圍內。 – Angew
不是一般的解決方案,但對於此問題的方法,如果它被允許:使用['的#pragma once'](https://en.wikipedia.org/wiki/Pragma_once)代替包括警衛。 – stefaanv