我有两个关于此 Misra 警告的用例,如下所述。编译器是否为 #if 定义不能使用的某些或特定名称?
目前,我已通过 //lint !e9071
禁用此警告,但我们真的需要为此类警告做任何事情吗?如果我们禁用此类警告,是否会有任何影响或风险?
案例一:
#ifndef __CCPPAR_H__
#define __CCPPAR_H__ //lint !e9071
#include "Ccp_Cfg.h"
#endif /* multiple inclusion protection - __CCPPAR_H__ */
观察到的警告:
defined macro '__CCPPAR_H__' is reserved to the compiler [MISRA 2012 Rule 21.1, required]
案例二:
#ifndef __CCP_H__
#define __CCP_H__ //lint !e9071
#include "Ccppar.h"
#define MAJOR 0x02
#define MINOR 0x01
/* other parts of code */
#endif
观察到以下 Misra 警告:
defined macro '__CCP_H__' is reserved to the compiler [MISRA 2012 Rule 21.1, required]
最佳答案
C 标准,更不用说 MISRA,保留所有以双下划线开头的标记。
您面临的实际风险是您的 C 标准库实现使用该符号甚至是编译器本身,这与您的冲突。
C11 §7.1.3 Reserved identifiers的一部分说:
- 所有以下划线和大写字母或另一个下划线开头的标识符始终保留供任何使用。
- 所有以下划线开头的标识符始终保留用作普通和标记 namespace 中具有文件范围的标识符。
关于c - 定义的宏 '__CCP_H__' 保留给编译器 [MISRA 2012 规则 21.1,必需],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57610951/