4

//定义了一些静态常量变量

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 不将静态 const 成员视为数值?

显式键入强制转换案例标签(应该解决这个问题)是个好主意吗?

案例标签需要类型转换为什么类型?会uint8_t做吗?

其他一些方法可以免除这个 Lint 问题?

4

2 回答 2

1

尝试使用枚举,因为它们是“已知的”,例如使用以下代码,第二个函数没有问题。

#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;
}
于 2014-07-09T00:12:24.447 回答
1

规则说: “ [明确] 有符号字符和无符号字符类型只能用于数值的存储和使用。” 我认为这不允许用作标签,并且 lint 错误消息的措辞很糟糕。我认为它没有任何问题,只会禁用该代码的警告,或者,如有必要,禁用整个文件。

于 2014-07-08T23:54:50.710 回答