为什么出现运行时错误而不是编译错误

本文关键字:编译 错误 运行时错误 为什么 | 更新日期: 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;