編譯沒錯(cuò)連接出錯(cuò) 能解釋下編譯失敗的原因嗎?
能解釋下編譯失敗的原因嗎?編譯失敗的原因有很多。主要有以下幾種類型:(1)用戶編寫的源程序存在語法錯(cuò)誤。例如:引用而不定義變量。這種錯(cuò)誤是最簡(jiǎn)單的,也是編譯器最容易檢出的錯(cuò)誤,因此會(huì)導(dǎo)致源程序的編譯失
能解釋下編譯失敗的原因嗎?
編譯失敗的原因有很多。主要有以下幾種類型:
(1)用戶編寫的源程序存在語法錯(cuò)誤。例如:引用而不定義變量。這種錯(cuò)誤是最簡(jiǎn)單的,也是編譯器最容易檢出的錯(cuò)誤,因此會(huì)導(dǎo)致源程序的編譯失?。?/p>
](2)用戶編寫的源程序中有引用,沒有初始化變量,也會(huì)導(dǎo)致程序運(yùn)行錯(cuò)誤。例如:雖然用戶定義了一個(gè)指向內(nèi)存地址的指針變量,但是在使用它之前,它不會(huì)被初始化,也不會(huì)做出任何判斷,并且會(huì)給指針指向的內(nèi)存地址一個(gè)值。在這種情況下,編譯器無法按語法檢查它,但一旦程序運(yùn)行,就會(huì)出現(xiàn)錯(cuò)誤。在Windows系統(tǒng)中,指向XXX的內(nèi)存不能被讀?。ɑ?qū)懭耄?。如果是在UNIX/Linux系統(tǒng)中,就會(huì)發(fā)生內(nèi)核轉(zhuǎn)儲(chǔ)。
(3),數(shù)組超出界限。這種錯(cuò)誤是編譯器檢測(cè)不到的,但一旦程序運(yùn)行,程序的運(yùn)行結(jié)果可能是隨機(jī)的。這不是用戶需要的。
所以從編譯的本質(zhì)來看,以上情況應(yīng)該屬于編譯失敗的類型。因?yàn)榫幾g器不能阻止這些錯(cuò)誤,反而讓程序在各種意想不到的結(jié)果中運(yùn)行。