为什么发生运行时错误而不是编译错误?

时间:2014-10-27 09:55:23

标签: c# variables compilation runtime-error

我的问题出现在以下代码中:

 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 Runtime Error occurred instead of Compile Error?
    }

提前感谢您的回答。 我为英语写作不好而道歉,因为英语是我的第二语言。

1 个答案:

答案 0 :(得分:0)

因为只有在运行时变量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;