夹板:定义前使用的局部变量
Splint: local variable used before definition
我知道局部变量在未设置时可以有 "random" 值,但是用指针设置局部变量的第一个值不好吗?例如:
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 是 "used before definition" 并且我对该警告感到有点惊讶,因为我相信 val 的值将在执行 printf 和使用 val 之前设置。夹板是否不够先进,无法识别用于设置初始值的参考?
如果 setValue(&val);
通过指针引用将 val
分配给某物,那么您的代码行为已定义,分析工具不正确.
但是,如果您可以避免变量处于未初始化状态(没有多余的赋值),那将是更可取的。是否可以重构为
int val = setValue();
说?
我知道局部变量在未设置时可以有 "random" 值,但是用指针设置局部变量的第一个值不好吗?例如:
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 是 "used before definition" 并且我对该警告感到有点惊讶,因为我相信 val 的值将在执行 printf 和使用 val 之前设置。夹板是否不够先进,无法识别用于设置初始值的参考?
如果 setValue(&val);
通过指针引用将 val
分配给某物,那么您的代码行为已定义,分析工具不正确.
但是,如果您可以避免变量处于未初始化状态(没有多余的赋值),那将是更可取的。是否可以重构为
int val = setValue();
说?