为什么出现运行时错误而不是编译错误
本文关键字:编译 错误 运行时错误 为什么 | 更新日期: 2023-09-27 18:27:53
我的问题在下面代码的注释中:
static void Main(string[] args)
{
int a = int.Parse(Console.ReadLine());
int div1 = 5/a; // a isn't Unknown until Runtime,
// if a==0, Runtime error occurred. it's Ok!
a = 0;
int div2 = 10/a; // local variable a's Value is zero
// and not exist any sentence
// between "a=0;" and "int div2=10/a;" to change variable a,
// why did a runtime error occur instead of a compile error?
}
提前感谢您的回答。我为英语写得不好道歉,因为英语是我的第二语言。
因为只有在运行时变量a
才会被赋值为0
,因此除法将失败,出现DivideByZero
异常。
尝试这样做int div2 = 10 / 0;
,会看到编译器当场抛出一个红色的歪歪扭扭的错误。
如果您像下面的一样将int a
声明为constant
,情况也是一样的
constant int a = 0;
int div2 = 10 / a;
这是因为,在编译时;编译器只需在引用的任何地方替换常数值,这与直接将其除以0
相同。所以下面的线
int div2 = 10 / a;
将成为
int div2 = 10 / 0;