// определены некоторые статические переменные 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?
Попробуйте использовать 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;
}
правило говорит: «[Явно] знаковый символ и тип без знака должны использоваться только для хранения и использования числовых значений». Я предполагаю, что это запрещает использование в качестве меток, и сообщение об ошибке lint плохо сформулировано. Я не вижу в этом ничего плохого и просто отключил бы предупреждение для этого кода или, если необходимо, для всего файла.