Мне нравится всегда инициализировать локальные переменные, например,
int32_t result = 0;
Я думал, что это хороший стиль программирования, потому что "результат" никогда не может быть инициализирован, независимо от того, установлены ли следующие if-конструкции или нет.
Но теперь я пробую инструмент проверки статического кода (C_STAT для встроенного рабочего места IAR), и это жалуется на то, что в приведенной ниже функции правило MISRA-C ++ 2008-01-06 ("не должно содержать экземпляров энергонезависимых переменных"). данные значения, которые впоследствии никогда не используются ") и MISRA C: 2012, правило 2.2c (" без мертвого кода ") и CWE 563 (" неиспользуемая переменная ") нарушаются.
// gets signal1 - signal2 (checks range of value)
int16_t getSignalDifferenceFromFloat(float signal1, int16_t signal2)
{
int32_t result = 0; // <-- this assignment makes the violation
// ... but I feel better with it
if (signal1 > 65535.0)
{
// because result cannot be smaller than the max value of TSignal
result = 32767;
}
else if (signal1 < -65535.0) // <-- here an else was missing
{
// because result cannot be larger than the min value of TSignal
result = -32768;
}
else
{
result = (int32_t)signal1 - (int32_t)signal2;
if (result < -32768)
{
result = -32768;
}
else if (result > 32767)
{
result = 32767;
}
}
return (int16_t) result;
}
original Вопрос: Что вы об этом думаете?
Новые вопросы:
- Существуют ли хорошие стандарты кодирования, которые всегда требуют немедленной инициализации объявленных локальных переменных?
- Является ли средство проверки кода слишком педантичным (некоторые компиляторы не жалуются в этом месте, но будут жаловаться, что переменная будет полностью не использована)? Я делаю это годами, но не могу вспомнить, где я это видел.