交换机外壳标签上的PC棉绒:违反MISRA C++2008要求规则5-0-12
PC-lint on switch case labels: Violates MISRA C++ 2008 Required Rule 5-0-12
//定义了一些静态常量变量
static const uint8_t FirstData = 1;
static const uint8_t SecondData = 2;
//一些交换机案例
switch (Numdata) //Numdata is either FirstData, SecondData
{
case FirstData:
//some code
case SecondData:
//some code
}
//现在PC lint对此抱怨"注意1960:违反MISRA C++2008要求的规则5-0-12,不允许在案例标签中使用非数字值"
所以问题是为什么PC lint不将静态常量成员视为数值?
显式键入强制转换大小写标签(应该可以解决此问题)是个好主意吗?
案例标签需要类型转换为什么类型?只有uint8_t
可以吗?
有其他方法可以免除这个林特问题吗?
尝试使用枚举,因为它们是"已知的",例如使用以下代码,第二个函数没有问题。
#include <cstdint>
namespace testa
{
static const uint8_t FirstData = 1;
static const uint8_t SecondData = 2;
int32_t func_A(uint8_t Numdata)
{
int32_t ret = 0;
switch (Numdata) //Numdata is either FirstData, SecondData
{
case FirstData:
ret = 1;
case SecondData:
ret = 2;
}
return ret;
}
}
namespace testb
{
enum data {
FirstData,
SecondData
};
int32_t func_B(data Numdata)
{
int32_t ret = 0;
switch (Numdata) //Numdata is either FirstData, SecondData
{
case FirstData:
ret = 1;
case SecondData:
ret = 2;
}
return ret;
}
}
int32_t main(int32_t, int8_t*[])
{
int32_t z = 0;
z += testa::func_A(testa::FirstData);
z += testa::func_A(testa::SecondData);
z += testb::func_B(testb::FirstData);
z += testb::func_B(testb::SecondData);
return z;
}
规则规定:"[显式]有符号的字符和无符号的字符类型只能用于存储和使用数值。"我认为这不允许用作标签,lint错误消息的措辞也很糟糕。我认为它没有任何问题,只会禁用该代码的警告,或者,如果必要的话,禁用整个文件的警告。
相关文章:
- 如何在MISRA C++之后实施CRTP
- 枚举和二进制或运算符(MISRA C++ 2008,4-5-2)
- 如何使用Visual Studio 2008将字符串映射到函数?
- c++:需要正确的语法以避免 MISRA 14-6-1 警告.具有依赖基类的类模板
- 使用 2x1 图块平铺 2xM 数组以最大化差异 - INOI 2008,P2
- MSVC 2008,调试过程,无法调试
- 生成可视C++ 2008 项目时出现链接器错误
- 由于无符号算术运算符的环绕而导致的 MISRA 错误
- Visual Studio 2008 WriteFile
- VS 2008 和 VS 2017 中静态参数的不同行为
- libstdc 是否符合Misra C
- MISRA 警告<复杂表达式隐式转换为不同的基本类型>
- Microsoft Visual Studio 2008,版本9.0.30739.1 SP,DLL构建错误
- Misra C 2008奇怪的警告
- MISRA-C++:2008[8-4-3]:返回函数中的所有出口路径
- MISRA C++ 2008 违反规则 5-2-7:不得直接或间接将指针类型的对象转换为不相关的指针类型
- MISRA C++-2008规则5-0-15-数组索引应是指针算术的唯一形式
- 嵌套交换机案例是否符合MISRA C++2008规则
- 如何在std::map中插入项目而不违反MISRA C++2008必需规则5-2-12
- 交换机外壳标签上的PC棉绒:违反MISRA C++2008要求规则5-0-12