Splint: локальная переменная, используемая до определения
Я знаю, что локальные переменные могут иметь "случайное" значение, когда они не установлены, но плохо ли устанавливать первое значение локальной переменной с помощью указателя? Например:
void setValue(int* p_val)
{
*p_val = …; /* Assignment does not use *p_val */
}
int main(void)
{
int val;
setValue(&val);
printf("%d", val);
return 0;
}
Где setValue только устанавливает и никогда не читает значение ссылочной переменной. Splint предупреждает меня о том, что val "используется перед определением", и я немного удивлен этим предупреждением, так как считаю, что значение val должно быть установлено до выполнения printf и использования val. Разве шина недостаточно продвинута, чтобы распознать ссылку, используемую для установки начального значения?
1 ответ
Если setValue(&val);
назначает val
к чему-либо через указатель, то поведение вашего кода будет определено, а инструмент анализа неверен.
Но если вы можете избежать использования переменных в неинициализированных состояниях (без лишних присваиваний), тогда это будет предпочтительнее. Будет ли возможно рефакторинг
int val = setValue();
сказать?