是否可以为未分配的局部变量保证CS0165 C#编译器错误?
作者:互联网
在这样的代码中:
int val;
if (something())
val = 10;
val++; // Error CS0165 Use of unassigned local variable
当使用局部变量时,如果没有确定地初始化它,我会收到CS0165错误消息.
在C语言世界中,这种情况是未定义的行为类情况,这意味着任何情况都是允许的.因此,也许有一个编译器错误,也许有一个编译器警告,也许有一个运行时错误,也许代码只使用了当时内存中的任何内容,并祝您好运.
是否可以为C#中的此类代码保证CS0165?
是否存在这种特定代码段不产生错误消息的情况?
解决方法:
Is CS0165 guaranteed for such code in C#?
是的,设计了确定赋值规则,以便永远不会在明确写入局部变量之前读取它.
这也很保守-例如:
bool condition = false;
int x;
if (condition)
{
x = 0;
}
if (!condition)
{
x = 1;
}
Console.WriteLine(x); // Error
即使我们知道如果要输入的语句体中只有其中之一,编译器就不会输入-因此x不一定在末尾分配.
确定分配的规则在5.3节的C#5规范中.
请注意,各种变量类别(例如,静态字段和类的实例字段)被视为“初始分配的”-但是它们具有明确指定的默认值,因此那里仍然没有未定义的行为.
标签:language-lawyer,compiler-errors,static-analysis,c,net 来源: https://codeday.me/bug/20191025/1928418.html