能解釋下編譯失敗的原因嗎?
編譯失敗的原因有很多種。其中主要有以下一些類型:
(1)、用戶編寫的源程序中有語法錯誤。例如:未定義某一個變量就進行引用。這一類錯誤是最簡單的,也是編譯器最容易檢查出來的,所以會產生對源程序的編譯失敗;
(2)、用戶編寫的源程序中有未對變量進行初始化就進行引用,也會導致程序運行錯誤。例如:用戶雖然定義了一個指向某一個內存地址的指針變量,但是在使用前卻未對它進行初始化,并進行任何判斷,就往該指針指向的內存地址賦予了一個數值,這種情況在語法上編譯器是檢查不出來的,但是程序一旦運行起來,肯定就會出現錯誤了。在 WINDOWS 系統下一般是:指向XXXX的內存不能夠為 Read (或者為 Write),要是在 UNIX/Linux 系統下就會發生 Core Dumped。
(3)、數組越界。這類錯誤也是編譯器檢查不出來的,但是一旦程序運行起來,程序的運行結果可能就是一個隨機的結果。而不是用戶需要得到的結果。
所以從編譯的實質上說,以上情況都應該屬于編譯失敗的類型。因為編譯器并無法阻止這些錯誤的發生,而是讓程序在運行時發生了各種各樣的意想不到的運行結果。