我的問題是婁代碼的註釋:爲什麼發生運行時錯誤而不是編譯錯誤?
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