當前位置:首頁 » 編程軟體 » 編譯錯誤包括

編譯錯誤包括

發布時間: 2023-08-08 14:27:42

編譯程序可發現源程序全部的什麽錯誤和部分的什麽錯誤

編譯程序可發現源程序全部的「語法」錯誤和部分的「語義」錯誤。
特意找了詳細解釋幫你理解:用戶編寫的源程序不可避免的會有一些錯誤,這些錯誤大致可以分為靜態錯誤和動態錯誤。動態錯誤也稱動態語義錯誤,它們發生在程序運行時,例如除數為0、引用數組元素下標錯誤等。靜態錯誤是之編譯階段發現的程序錯誤,可分為語法錯誤和靜態語義錯誤,如單詞拼寫錯誤、標點符號錯誤、表達式缺少操作數、括弧不匹配等有關語言結構上的錯誤稱為語法錯誤,而語義分析時發現的運算符與運算對象不合法等錯誤屬於靜態語義錯誤。語義分析階段主要檢查源程序是否包含靜態語義錯誤,而一般的編譯器很難檢查出動態語義錯誤。

㈡ c++中什麼是語法錯誤,什麼是編譯錯誤

程序的錯誤主要分成三種:

  1. 編譯鏈接錯誤;

    編譯鏈接錯誤又分成編譯錯和鏈接錯。

    編譯錯就是普通意義上的語法錯,編譯器進行語法檢查不通過,也就是程序違背了計算機語言的語法,例如:括弧不匹配、變數名拼寫錯誤、用保留字定義變數名等;

    鏈接錯是指程序通過了語法檢查,但是無法生成可執行文件,最常見的是鏈接找不到lib庫。初學者有時寫了函數的聲明,但是缺少函數的定義,此時就會出現鏈接錯。

  2. 運行錯誤;

    運行錯是程序可以執行,但是在執行過程中發生異常,提前退出程序。最常見的是指針越界,打開文件失敗繼續讀取文件,總而言之是讓計算機執行一些不能執行的語句。

  3. 邏輯錯誤

    邏輯錯是程序也能運行,就是結果不對,主要原因有:程序演算法本身錯誤,程序和演算法不同義等。

    例如:新手經常將判斷相等的==寫成=賦值,往往就會導致邏輯錯。

你的BD(int,int); 是一句函數調用?還是一句函數聲明?

㈢ 編譯的時候能發現哪些錯誤

詞法分析階段能夠檢測出輸入中不能形成源州銀語言任何記號的錯誤字元串。語法分析階段可以確簡扮定記號流中違反源語言結構(語法)規則的錯誤。語義分析階段試圖檢測出具有正確語法結構但對操作無意義的部分。例如,我們試圖將兩個標識符相加,其中冊咐宴一個標識符是數組名,而另一個標識符卻是過程名。(編譯原理-龍書原話)。其他錯誤例如演算法錯誤編譯程序檢測不出。

㈣ 關於C語言在編譯時常出現的錯誤有哪些

1、fatal error C1010: unexpected end of file while looking for precompiled header directive。

尋找預編譯頭文件路徑時遇到了不該遇到的文件尾。(一般是沒有#include "stdafx.h")

2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory

不能打開包含文件「R…….h」:沒有這樣的文件或目錄。

3、error C2011: 'C……': 'class' type redefinition

類「C……」重定義。

4、error C2018: unknown character '0xa3'

不認識的字元'0xa3'。(一般是漢字或中文標點符號)

5、error C2057: expected constant expression

希望是常量表達式。(一般出現在switch語句的case分支中)

6、error C2065: 'IDD_MYDIALOG' : undeclared identifier

「IDD_MYDIALOG」:未聲明過的標識符。

7、error C2082: redefinition of formal parameter 'bReset'

函數參數「bReset」在函數體中重定義。

8、error C2143: syntax error: missing ':' before '{'

句法錯誤:「{」前缺少「;」。

9、error C2146: syntax error : missing ';' before identifier 'dc'

句法錯誤:在「dc」前丟了「;」。

10、error C2196: case value '69' already used

值69已經用過。(一般出現在switch語句的case分支中)

11、error C2509: 'OnTimer' : member function not declared in 'CHelloView'

成員函數「OnTimer」沒有在「CHelloView」中聲明。

12、error C2511: 'reset': overloaded member function 'void (int)' not found in 'B'

重載的函數「void reset(int)」在類「B」中找不到。

13、error C2555: 'B::f1': overriding virtual function differs from 'A::f1' only by return type or calling convention

類B對類A中同名函數f1的重載僅根據返回值或調用約定上的區別。

14、error C2660: 'SetTimer' : function does not take 2 parameters

「SetTimer」函數不傳遞2個參數。

15、warning C4035: 'f……': no return value

「f……」的return語句沒有返回值。

16、warning C4553: '= =' : operator has no effect; did you intend '='?

沒有效果的運算符「= =」;是否改為「=」?

17、warning C4700: local variable 'bReset' used without having been initialized

局部變數「bReset」沒有初始化就使用。

18、error C4716: 'CMyApp::InitInstance' : must return a value

「CMyApp::InitInstance」函數必須返回一個值。

19、LINK : fatal error LNK1168: cannot open Debug/P1.exe for writing

連接錯誤:不能打開P1.exe文件,以改寫內容。(一般是P1.Exe還在運行,未關閉)

20、error LNK2001: unresolved external symbol "public: virtual _ _thiscall C……::~C……(void)"

連接時發現沒有實現的外部符號(變數、函數等)。

function call missing argument list 調用函數的時候沒有給參數。

member function definition looks like a ctor, but name does not match enclosing class 成員函數聲明了但沒有使用

unexpected end of file while looking for precompiled header directive 在尋找預編譯頭文件時文件意外結束,編譯不正常終止可能造成這種情況

㈤ C++中邏輯錯誤、語法錯誤、編譯錯誤分別出現什麼情況

語法錯誤 就會導致 編譯錯誤
編譯錯誤和連接錯誤不能生成可執行程序

邏輯錯誤 沒辦法檢查,只能影響結果

java中編譯錯誤有什麼

在MyEclipse等軟體中編譯出錯,左邊會有紅叉提示,即在編譯時便無法通過,
和它相對應的是運行錯誤,即編譯時通過了,運行時卻出錯了。
一般來說,編譯錯誤有 語法錯誤 ;變數重復 ;括弧未成對 ; 變數未聲明或初始化 ;
方法名稱錯誤 ; 類型無法轉換 ;無法到達的語句 等等。。
希望可以幫助到你~O(∩_∩)O~~

㈦ java語言中什麼叫做編譯錯誤

就是你用javac命令將源代碼(.java)文件翻譯成位元組碼(.class)文件時產生的錯誤。
比如,變數名不符合規定,變數沒定義,關鍵字拼寫錯誤等等。。。
java的編譯器(javac)會根據java語法規定做一些檢查,不符合規定的就不通過編譯。

編譯錯誤,是相對於運行時錯誤而言的。
運行時錯誤,是你用java命令運行時會出現的錯誤,一般會拋出異常。

㈧ 程序編譯錯誤不知道是什麼原因

不能通編譯過的程序實際上還不是合法的程序,因為它不滿足C語言對於程序的基本要求。

檢查語法錯誤的第一要義:集中力量檢查系統發現的第一個錯誤,弄清並改正它。

在編譯過程中系統發現的錯誤主要有兩類:基本語法錯誤和上下文關系錯誤。這些錯誤都在表面上,可以直接看得見。也是比較容易弄清,比較容易解決的。關鍵是需要熟悉C語言的語法規定和有關上下文關系的規定,按照這些規定檢查程序正文,看看存在什麼問題。

編譯中系統發現錯誤都能指出錯誤的位置。不同系統在這方面的能力有差異,在錯誤定位的准確性方面有所不同。有的系統只能指明發現錯誤的行,有的系統還能夠指明行內位置。

一般說,系統指明的位置未必是真實錯誤出現的位置。通常情況是錯誤出現在前,而系統發現錯誤在後,因為它檢查到實際錯誤之後的某個地方,才能確認出了問題,因此報出錯誤信息。要確認第一個錯誤的原因,應該從系統指明的位置開始,在那裡檢查,並從那裡開始向前檢查。

系統的錯誤信息中都包含一段文字,說明它所認定的錯誤原因。應該仔細閱讀這段文字,通常它提供了有關錯誤的重要線索。但也應該理解,錯誤信息未必准確,有時錯誤確實存在,但系統對錯誤的解釋也可能不對。也就是說,在查找錯誤時,既要重視系統提供的錯誤信息,又不應為系統的錯誤信息所束縛。

發現了問題,要想清楚錯誤的真正原因,然後再修改。不要蠻干。在這時的最大誘惑就是想趕快改,看看錯誤會不會消失。但是蠻乾的結果常常是原來的錯誤沒有弄好,又搞出了新的錯誤。

另一個值得注意的地方:程序中的一個語法錯誤常常導致編譯系統產生許多錯誤信息。如果你改正了程序中一個或幾個錯誤,下面的弄不清楚了,那麼就應該重新編譯。改正一處常常能消去許多錯誤信息行。

解決語法錯誤

常見語法錯誤:

1)缺少語句、聲明、定義結束的分號。

2)某種括弧不配對。C語言中括弧性質的東西很多,列舉如下:
( ), [ ], { }, ' ', " ", /* */
在不同位置的括弧不配對可能引起許多不同的錯誤信息。

3)關鍵字拼寫錯誤。

較難認定的典型錯誤:

1)宏定義造成的錯誤。這種東西不能在源程序文件中直接看到,是在宏替換之後出現的。常見的能引起語法錯誤的宏定義錯誤:宏定義中有不配對的括弧,宏定義最後加了不該有的分號,……

解決上下文關系錯誤

1)變數沒有定義。產生這個問題的原因除了變數確實沒有大意外,還可能是變數的拼寫錯誤,變數的作用域問題(在不能使用某個變數的地方想去用那個變數)。

2)變數重復定義。例如在同一個作用域里用同樣名字定義了兩個變數,函數的局部變數與參數重名等。

3)函數的重復定義。可能是用同一個名字定義了兩個不同的函數。或者是寫出的函數原型在類型上與該函數的定義不相符。有時沒有原型而直接寫函數調用也可能導致這種錯誤信息,因為編譯程序在遇到函數調用而沒有看到函數原型或函數定義時,將給函數假定一個默認原型。如果後來見到的函數定義與假定不符,就會報告函數重復定義錯誤。

4)變數類型與有關運算對運算對象或者函數對參數的要求不符。例如有些運算(如 %)要求整數參數,而你用的是某種浮點數。

5)有些類型之間不能互相轉換。例如你定義了一個結構變數,而後要用它給整數賦值。系統容許的轉換包括:數值類型之間的轉換,整數和指針之間的轉換,指針之間的轉換。其餘轉換(無論是隱含的,還是寫出強制)都不允許。參見《C語言程序設計》(K&R)197-199頁。

如何看待編譯警告

當編譯程序發現程序中某個地方有疑問,可能有問題時就會給出一個警告信息。警告信息可能意味著程序中隱含的大錯誤,也可能確實沒有問題。對於警告的正確處理方式應該是:盡可能地消除之。對於編譯程序給出的每個警告都應該仔細分析,看看是否真的有問題。只有那些確實無問題的警告才能放下不管。

注意:經驗表明,警告常常意味著嚴重的隱含錯誤。

常見警告:

1)(局部自動)變數沒有初始化就使用。如果對局部指針變數出現這種情況,後果不堪設想。對於一般局部自動變數,沒有初始化就使用它的值也不會是有意義的。

2)在條件語句或循環語句的條件中寫了賦值。大部分情況是誤將 == (等於判斷)寫成 = 了。這是很常見的程序錯誤,有些編譯程序對這種情況提出警告。

熱點內容
死鎖避免的演算法 發布:2025-02-05 04:43:07 瀏覽:579
python查文檔 發布:2025-02-05 04:27:49 瀏覽:496
javaxmldom 發布:2025-02-05 04:27:40 瀏覽:9
linux修改內存大小 發布:2025-02-05 04:26:05 瀏覽:997
ftp命令復制文件 發布:2025-02-05 04:26:00 瀏覽:303
python好用的ide 發布:2025-02-05 04:14:18 瀏覽:516
id密碼開頭是多少 發布:2025-02-05 04:11:51 瀏覽:101
數據結構c語言ppt 發布:2025-02-05 04:11:45 瀏覽:43
如何用學習機配置的筆寫字 發布:2025-02-05 04:09:15 瀏覽:395
5歲編程 發布:2025-02-05 04:06:21 瀏覽:653