Splint:定义前使用的局部变量

时间:2017-12-01 13:15:52

标签: c pointers definition 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是“在定义之前使用”,我对这个警告有点惊讶,因为我相信在执行printf之前设置val的值并使用val。夹板是否不够先进以识别用于设置初始值的参考?

1 个答案:

答案 0 :(得分:6)

如果setValue(&val); 通过指针deference将val分配给某个内容,则会定义代码的行为,并且分析工具不正确。

但是如果你可以避免让变量处于未初始化状态(没有多余的任务),那么这将是更可取的。是否有可能重构

int val = setValue();

说什么?