gpt4 book ai didi

c++ - "potentially uninitialized local variable"和处理所有可能性的开关

转载 作者:行者123 更新时间:2023-12-03 02:49:26 27 4
gpt4 key购买 nike

MSVC 对潜在未初始化变量的警告并不是特别好,特别是它错误地声称 i 可以在此程序中未初始化:

#include<cstdlib>


enum class Color{
Red,
Green
};
int f(Color c){
int i;
switch(c){
case Color::Red:
i=11;
case Color::Green:
i=22;
};
return i;
}

int main(){
return f(rand()?Color::Red : Color::Green);
}

warning C4701: potentially uninitialized local variable 'i' used

我显然可以将 i 初始化为 0 或使用 pargmas 禁用警告,但是如果我添加 enum Blue 并且我从不在 switch 中处理它,并且我希望它在这种情况下触发,则此警告将不会触发。

有什么方法可以让这个 MSVC 警告按预期工作吗?

最佳答案

switch 语句没有默认标签。所以确实变量 i 可以未初始化。

您可以重写该函数,例如

int f(Color c){
int i = 11; // Color::Red

switch(c){
case Color::Green:
i=22;
break;
}

return i;
}

另一种方法是添加默认标签,例如

int f(Color c){
int i;

switch(c){
default:
case Color::Red:
i=11;
break;
case Color::Green:
i=22;
breal;
}

return i;
}

在这种情况下,正如您自己指出的那样,您可以在默认标签后包含带有断言检查的语句。

关于c++ - "potentially uninitialized local variable"和处理所有可能性的开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60095348/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com