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();

сказать?

Другие вопросы по тегам