4

我知道局部变量在未设置时可以具有“随机”值,但是用指针设置局部变量的第一个值是不是很糟糕?例如:

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 之前设置的。夹板是否不够先进,无法识别用于设置初始值的参考?

4

1 回答 1

6

如果setValue(&val); 确实val通过指针引用分配给某些东西,那么您的代码的行为就被定义了,并且分析工具是不正确的。

但是,如果您可以避免变量处于未初始化状态(没有多余的分配),那么这将是可取的。是否可以重构为

int val = setValue();

说?

于 2017-12-01T13:18:45.983 回答