編譯時的錯誤信息
① 程序編譯錯誤不知道是什麼原因
不能通編譯過的程序實際上還不是合法的程序,因為它不滿足c語言對於程序的基本要求。
檢查語法錯誤的第一要義:集中力量檢查系統發現的第一個錯誤,弄清並改正它。
在編譯過程中系統發現的錯誤主要有兩類:基本語法錯誤和上下文關系錯誤。這些錯誤都在表面上,可以直接看得見。也是比較容易弄清,比較容易解決的。關鍵是需要熟悉C語言的語法規定和有關上下文關系的規定,按照這些規定檢查程序正文,看看存在什麼問題。
編譯中系統發現錯誤都能指出錯誤的位置。不同系統在這方面的能力有差異,在錯誤定位的准確性方面有所不同。有的系統只能指明發現錯誤的行,有的系統還能夠指明行內位置。
一般說,系統指明的位置未必是真實錯誤出現的位置。通常情況是錯誤出現在前,而系統發現錯誤在後,因為它檢查到實際錯誤之後的某個地方,才能確認出了問題,因此報出錯誤信息。要確認第一個錯誤的原因,應該從系統指明的位置開始,在那裡檢查,並從那裡開始向前檢查。
系統的錯誤信息中都包含一段文字,說明它所認定的錯誤原因。應該仔細閱讀這段文字,通常它提供了有關錯誤的重要線索。但也應該理解,錯誤信息未必准確,有時錯誤確實存在,但系統對錯誤的解釋也可能不對。也就是說,在查找錯誤時,既要重視系統提供的錯誤信息,又不應為系統的錯誤信息所束縛。
發現了問題,要想清楚錯誤的真正原因,然後再修改。不要蠻干。在這時的最大誘惑就是想趕快改,看看錯誤會不會消失。但是蠻乾的結果常常是原來的錯誤沒有弄好,又搞出了新的錯誤。
另一個值得注意的地方:程序中的一個語法錯誤常常導致編譯系統產生許多錯誤信息。如果你改正了程序中一個或幾個錯誤,下面的弄不清楚了,那麼就應該重新編譯。改正一處常常能消去許多錯誤信息行。
解決語法錯誤
常見語法錯誤:
1)缺少語句、聲明、定義結束的分號。
2)某種括弧不配對。C語言中括弧性質的東西很多,列舉如下:
( ), [ ], { }, ' ', " ", /* */
在不同位置的括弧不配對可能引起許多不同的錯誤信息。
3)關鍵字拼寫錯誤。
較難認定的典型錯誤:
1)宏定義造成的錯誤。這種東西不能在源程序文件中直接看到,是在宏替換之後出現的。常見的能引起語法錯誤的宏定義錯誤:宏定義中有不配對的括弧,宏定義最後加了不該有的分號,……
解決上下文關系錯誤
1)變數沒有定義。產生這個問題的原因除了變數確實沒有大意外,還可能是變數的拼寫錯誤,變數的作用域問題(在不能使用某個變數的地方想去用那個變數)。
2)變數重復定義。例如在同一個作用域里用同樣名字定義了兩個變數,函數的局部變數與參數重名等。
3)函數的重復定義。可能是用同一個名字定義了兩個不同的函數。或者是寫出的函數原型在類型上與該函數的定義不相符。有時沒有原型而直接寫函數調用也可能導致這種錯誤信息,因為編譯程序在遇到函數調用而沒有看到函數原型或函數定義時,將給函數假定一個默認原型。如果後來見到的函數定義與假定不符,就會報告函數重復定義錯誤。
4)變數類型與有關運算對運算對象或者函數對參數的要求不符。例如有些運算(如 %)要求整數參數,而你用的是某種浮點數。
5)有些類型之間不能互相轉換。例如你定義了一個結構變數,而後要用它給整數賦值。系統容許的轉換包括:數值類型之間的轉換,整數和指針之間的轉換,指針之間的轉換。其餘轉換(無論是隱含的,還是寫出強制)都不允許。參見《C語言程序設計》(K&R)197-199頁。
如何看待編譯警告
當編譯程序發現程序中某個地方有疑問,可能有問題時就會給出一個警告信息。警告信息可能意味著程序中隱含的大錯誤,也可能確實沒有問題。對於警告的正確處理方式應該是:盡可能地消除之。對於編譯程序給出的每個警告都應該仔細分析,看看是否真的有問題。只有那些確實無問題的警告才能放下不管。
注意:經驗表明,警告常常意味著嚴重的隱含錯誤。
常見警告:
1)(局部自動)變數沒有初始化就使用。如果對局部指針變數出現這種情況,後果不堪設想。對於一般局部自動變數,沒有初始化就使用它的值也不會是有意義的。
2)在條件語句或循環語句的條件中寫了賦值。大部分情況是誤將 == (等於判斷)寫成 = 了。這是很常見的程序錯誤,有些編譯程序對這種情況提出警告。
② 編譯錯誤,怎麼回事
關於編譯問題,如果說是編譯錯誤發生在自己編寫源程序的過程中的話,那麼問題的原因還是比較復雜的。通常關於用戶編寫的源程序的編譯出錯問題,這是一個很復雜的問題。因為編譯錯誤有很多種。例如:語法錯誤、系統庫連接錯誤、語義錯誤、數組越界、或者內存越界等等。
通常語法錯誤是最好解決的,因為源程序的語法出錯了,連編譯這一關都通不過,並且會告訴你在哪一行出錯了,這時候是最容易調試程序的。最難調試的就是:源程序雖然編譯通過了,但是程序的運行結果卻是錯誤的,這種是最難調試的。所以說,你必須要把詳細的出錯信息寫出來,別人們才好幫助你進行分析。
③ c語言編譯錯誤
因為你的a[6][6]這個數組沒有初始化,也沒有輸入值,所以內存中就沒有a數組的內容的地址,所以一運行就會出錯啊,訪問了不該訪問的內存,所以就報錯了。
④ 在編譯匯編程序時出現錯誤:1 severe errorS 。編譯器指出:error A2000 block nesting是什麼意思
error A2000: Block nesting error 說明:此錯誤信息通常見於一個段定義起始段名和末尾段名不一致。 修改:檢查段定義,使段名前後保持一致。
⑤ 怎樣快速找到java編譯時的錯誤
不管開發工具是否智能,都要學會閱讀錯誤信息,
想要找出問題很簡單,通常報錯了之後,閱讀列印出來的錯誤信息,都是最重要的糾錯手段。
報錯了之後首先要看錯誤信息的第一行,那一行包含兩種信息,前面一段記錄的是錯誤的類型,比如說java.lang.NullPointerException 這里隨便貼了個空指針異常,這是錯誤類型,之後後面跟的是對這個錯誤信息的描述,一般是英文,這個錯誤信息的描述非常重要,他詳細的說明了這個錯誤出現的原因,接下來的一行一行的,是出現錯誤的位置 一般是這樣的
at xxx.xxx.xxx.Xxx 意思是在哪個哪個類的第多少多少行,但是為什麼會出現一堆呢,因為java的異常是可以層層上拋的,最開始報錯的地方位置,然後上一層的位置,然後再上一層的位置.....所以會顯示一堆,其實他只是個位置信息而已,不要被龐大的錯誤信息嚇著。呵呵
⑥ arino顯示編譯錯誤,信息如下,怎麼解決
您好:確定是編譯時出現的這個問題而不是下載時出現的?
大致是說「校驗錯誤」,也就是下載程序後它又檢查了一遍發現Arino中的程序和剛下進去的東西對不上號。
你可以試著把Arino拔下,徹底關閉IDE(以及所有相關進程),再重啟,插上Arino,再下載看看。
如果始終不行,可能是你的AVR單片機壞了。要是直插封裝的就買塊新的AVR裝上去吧。要是貼片的那就沒有辦法了。
⑦ 如何快速查找C語言編譯時的錯誤
1、首先,我們啟動編譯軟體程序,今天我們以VC++6.0為例。
注意事項:
編譯語言是一種以編譯器來實現的編程語言。它不像直譯語言一樣,由解釋器將代碼一句一句運行,而是以編譯器,先將代碼編譯為機器碼,再加以運行。理論上,任何編程語言都可以是編譯式,或直譯式的。它們之間的區別,僅與程序的應用有關。
⑧ 編譯器錯誤信息: CS0016: 未能寫入輸出文件「c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary AS
編譯器錯誤信息: CS0016: 未能寫入輸出文件「c:WINDOWSMicrosoft.NETFrameworkv1.1.4322Temporary AS是設置錯誤造成的,解決方法為:
1、首先我們在運行框中輸入「regedit」,進入電腦的注冊表。
⑨ 編譯錯誤,如何解決error LNK2001: unresolved external symbol
導致「error LNK2001: unresolved external symbol」的原因為getStats此方法的鏈接庫沒有找到。很可能是工程中引用了第三方開源庫或者自己編譯生成的庫,且只用了頭文件,而沒有將對應的lib文件路徑加入到工程中。
具體解決方法為(此方法針對vs系列集成開發環境):
1.如果還未引入頭文件,那麼可以右鍵點擊項目,然後點擊「屬性」。
⑩ gcc編譯出現錯誤怎麼辦
有時候我們編譯一個大的項目的時候,會出現很多錯誤使得屏幕堆滿了很多無用的信息。一般情況下我們需要找到首次出現錯誤的地方,在gcc中添加編譯選項可以使編譯停止在第一次出現錯誤的地方:
$ gcc -Wfatal-errors foo.c // GCC 4.0 and later$ g++ -Wfatal-errors foo.cpp
$ g++ -fmax-errors=N foo.cpp // 在出現第 N 此錯誤的時候停止編譯,GCC 4.6 and later