PC-lint на этикетках корпуса коммутатора: Нарушение MISRA C ++ 2008 Требуется правило 5-0-12

// определены некоторые статические переменные const

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 делать?

Какой-то другой способ освободить эту проблему Lint?

3

Решение

Попробуйте использовать enum, поскольку они «известны», например, с помощью следующего кода, вторая функция не имеет проблемы.

#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;
}
1

Другие решения

правило говорит: «[Явно] знаковый символ и тип без знака должны использоваться только для хранения и использования числовых значений». Я предполагаю, что это запрещает использование в качестве меток, и сообщение об ошибке lint плохо сформулировано. Я не вижу в этом ничего плохого и просто отключил бы предупреждение для этого кода или, если необходимо, для всего файла.

1

По вопросам рекламы [email protected]