编程语言
首页 > 编程语言> > 是否可以为未分配的局部变量保证CS0165 C#编译器错误?

是否可以为未分配的局部变量保证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