我的问题是娄代码的注释:为什么发生运行时错误而不是编译错误?
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?
}
预先感谢您的回答。 因为英语是我的第二语言,所以我对英语差的写作表示歉意。
它仍然是一个运行时错误。编译错误只会发生在已知类型的问题或语法错误。 – Deanna 2014-10-27 09:58:18
让编译器检查编译时是否可能存在divzero问题没有多大意义 - 编译器逻辑将比编译代码复杂得多,想象如果您将代码暂停在= 0和10/a改变另一个线程的值。编译器也必须检查这个 – Sebastian 2014-10-27 10:05:51
编译器不会尝试运行代码并查看会发生什么。所以它不记住a == 0除以它,即使a只被分配了一行以上。如果a是复杂计算的结果呢?应该跟踪什么和不应该有什么限制? – 2014-10-27 10:06:46