C語言程序設(shè)計初學(xué)者常犯錯誤集錦_第1頁
C語言程序設(shè)計初學(xué)者常犯錯誤集錦_第2頁
C語言程序設(shè)計初學(xué)者常犯錯誤集錦_第3頁
C語言程序設(shè)計初學(xué)者常犯錯誤集錦_第4頁
C語言程序設(shè)計初學(xué)者常犯錯誤集錦_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、很多學(xué)習(xí)C語言的同學(xué)總會犯這樣那樣的低級錯誤,而主流的編輯器VC+6.0雖然可以指出這些錯誤,但有時候,它對低級錯誤并不那么敏感,讓很多初學(xué)者覺得“情何以堪”吶!本人也是C程初學(xué)者,在這,將自己常犯的一些錯誤列出來,并指出錯誤原因,希望對大家有幫助。另外,大家自己有什么典型錯誤的,也可一起分享,讓我們一起努力吧!O(_)O一、從最簡單的漏字多字開始吧:  1.1 在scanf賦值時漏&,實例如下:編譯器產(chǎn)生如下錯誤提示:snowkey.cpp(7) : warning C4700: local variable 'c' used without ha

2、ving been initializedsnowkey.cpp(7) : warning C4700: local variable 'b' used without having been initializedsnowkey.cpp(7) : warning C4700: local variable 'a' used without having been initialized意:局部變量的使用沒有被初始化 1.2 main函數(shù)后加;會產(chǎn)生一系列錯誤指示,系統(tǒng)會認為你main函數(shù)沒定義,事實上,你只是多了加了個分號而已,典型如下: 

3、 編譯器產(chǎn)生如下錯誤提示:(4) : error C2449: found '' at file scope (missing function header?)(17) : error C2059: syntax error : '' 1.3 定義數(shù)據(jù)類型時漏逗號, 也會產(chǎn)生一系列錯誤:  編譯器產(chǎn)生如下錯誤提示:(4) : error C2146: syntax error : missing '' before identifier 'n'(4) : error C2065:

4、 'n' : undeclared identifier(4) : error C2146: syntax error : missing '' before identifier 'sum'(4) : error C2065: 'sum' : undeclared identifier這幾條錯誤最容易誤導(dǎo)初學(xué)者,表面上說missing '',事實上,是少了個逗號。事實上,“syntax error : missing '' before identifier 'n'”和“'

5、n' : undeclared identifier”要合起來理解。 1.4 printf函數(shù)沒有用雙引號括起來: 編譯器產(chǎn)生如下錯誤提示: error C2001: newline in constant error C2146: syntax error : missing ')' before identifier 'scanf'意:新的一行沒斷開(指printf函數(shù))    語法錯誤,少了)在定義scanf函數(shù)前事實上,是少了"同樣的道理,如果在后面漏了字母

6、(如換行符n),也會顯示同樣的錯誤信息,要仔細查看,一般來說,把那整行仔細檢查一遍就可發(fā)現(xiàn)錯誤原因。實例如下: 編譯器產(chǎn)生如下錯誤提示:error C2001: newline in constanterror C2146: syntax error : missing ')' before identifier 'scanf'(和上面的一樣) 1.5 漏賦初始值直接進入循環(huán)加這種錯誤時灰常致命的因為編譯器往往檢測不出,程序也能運行,但運行結(jié)果往往是錯的。實例如下:    上例中(用于求一個數(shù)的位數(shù)及位

7、數(shù)之和的核心部分),cout未賦初始值,直接使用cout+,導(dǎo)致錯誤。然而,編譯器卻顯示:0 error(s), 0 warning(s)    對這種隱形的錯誤,一開始總讓人頭疼,但有錯誤經(jīng)驗了,就知道該往哪些方向去查錯了。       同樣的情況我還遇到過的是,使用scanf函數(shù)的時候,對于double型數(shù)據(jù),輸成了%f,導(dǎo)致程序語法正確,邏輯錯誤,檢查了很久才發(fā)現(xiàn)。大家在初學(xué)C的時候一定要注意double類型的輸入輸出格式是不同(%lf 和%f)。  

8、0;二、函數(shù)類錯誤2.1 調(diào)用函數(shù)時,誤用已賦值參數(shù):A圖B圖編譯器產(chǎn)生如下錯誤提示:error C2082: redefinition of formal parameter 'n'意:重新定義n由于在main函數(shù)中n已經(jīng)被賦值,故自定義的p函數(shù)就不可在重新使用n,可換用i,ri等任何不與main函數(shù)沖突的參數(shù)。 后記:找到個網(wǎng)址,里面也有很多錯誤的集合,有興趣的朋友可以進一步閱讀為了方便大家,我還是COPY過來了VC+編譯的常見錯誤1、fatal error C1010: unexpected end of file while looking for preco

9、mpiled header directive。尋找預(yù)編譯頭文件路徑時遇到了不該遇到的文件尾。(一般是沒有#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 

10、9;0xa3'不認識的字符'0xa3'。(一般是漢字或中文標點符號)5、error C2057: expected constant expression希望是常量表達式。(一般出現(xiàn)在switch語句的case分支中)6、error C2065: 'IDD_MYDIALOG' : undeclared identifier“IDD_MYDIALOG”:未聲明過的標識符。7、error C2082: redefinition of formal parameter 'bReset'函數(shù)參數(shù)“bReset”在函數(shù)體中重定義。8、error C

11、2143: syntax error: missing ':' before ''句法錯誤:“”前缺少“;”。9、error C2146: syntax error : missing '' before identifier 'dc'句法錯誤:在“dc”前丟了“;”。10、error C2196: case value '69' already used值69已經(jīng)用過。(一般出現(xiàn)在switch語句的case分支中)11、error C2509: 'OnTimer' : member functio

12、n not declared in 'CHelloView'成員函數(shù)“OnTimer”沒有在“CHelloView”中聲明。12、error C2511: 'reset': overloaded member function 'void (int)' not found in 'B'重載的函數(shù)“void reset(int)”在類“B”中找不到。13、error C2555: 'B:f1': overriding virtual function differs from 'A:f1' only

13、by return type or calling convention類B對類A中同名函數(shù)f1的重載僅根據(jù)返回值或調(diào)用約定上的區(qū)別。14、error C2660: 'SetTimer' : function does not take 2 parameters“SetTimer”函數(shù)不傳遞2個參數(shù)。15、warning C4035: 'f': no return value“f”的return語句沒有返回值。16、warning C4553: '= =' : operator has no effect; did you intend '

14、;='?沒有效果的運算符“= =”;是否改為“=”?17、warning C4700: local variable 'bReset' used without having been initialized局部變量“bReset”沒有初始化就使用。18、error C4716: 'CMyApp:InitInstance' : must return a value“CMyApp:InitInstance”函數(shù)必須返回一個值。19、LINK : fatal error LNK1168: cannot open Debug/P1.exe for writi

15、ng連接錯誤:不能打開P1.exe文件,以改寫內(nèi)容。(一般是P1.Exe還在運行,未關(guān)閉)20、error LNK2001: unresolved external symbol "public: virtual _ _thiscall C:C(void)"連接時發(fā)現(xiàn)沒有實現(xiàn)的外部符號(變量、函數(shù)等)VC6.0編譯常見錯誤第一部分 編譯錯誤1 error C2001: newline in constant編號:C2001直譯:在常量中出現(xiàn)了換行。錯誤分析:(1) 字符串常量、字符常量中是否有換行。(2) 在這句語句中,某個字符串常量的尾部是否漏掉了雙引號。(3)

16、 在這語句中,某個字符創(chuàng)常量中是否出現(xiàn)了雙引號字符“"”,但是沒有使用轉(zhuǎn)義符“"”。(4) 在這句語句中,某個字符常量的尾部是否漏掉了單引號。(5) 是否在某句語句的尾部,或語句的中間誤輸入了一個單引號或雙引號。 2 error C2015: too many characters in constant編號:C2015直譯:字符常量中的字符太多了。錯誤分析:單引號表示字符型常量。一般的,單引號中必須有,也只能有一個字符(使用轉(zhuǎn)義符時,轉(zhuǎn)義符所表示的字符當作一個字符看待),如果單引號中的字符數(shù)多于4個,就會引發(fā)這個錯誤。另外,如果語句中某個字符常量缺少右

17、邊的單引號,也會引發(fā)這個錯誤,例如:if (x = 'x | x = 'y') 值得注意的是,如果單引號中的字符數(shù)是2-4個,編譯不報錯,輸出結(jié)果是這幾個字母的ASC碼作為一個整數(shù)(int,4B)整體看待的數(shù)字。兩個單引號之間不加任何內(nèi)容會引發(fā)如下錯誤:error C2137: empty character constant。 3 error C2018: unknown character '0x#'編號:C2018直譯:未知字符0x#。錯誤分析:0x#是字符ASC碼的16進制表示法。這里說的未知字符,通常是指全角符號、字母、數(shù)字

18、,或者直接輸入了漢字。如果全角字符和漢字用雙引號包含起來,則成為字符串常量的一部分,是不會引發(fā)這個錯誤的。4 error C2041: illegal digit '#' for base '8'編號:C2141直譯:在八進制中出現(xiàn)了非法的數(shù)字#(這個數(shù)字#通常是8或者9)。錯誤分析:如果某個數(shù)字常量以“0”開頭(單純的數(shù)字0除外),那么編譯器會認為這是一個8進制數(shù)字。例如:“089”、“078”、“093”都是非法的,而“071”是合法的,等同于是進制中的“57”。 5 error C2065: 'xxxx' :

19、undeclared identifier編號:C2065直譯:標識符“xxxx”未定義。錯誤分析:首先,解釋一下什么是標識符。標志符是程序中出現(xiàn)的除關(guān)鍵字之外的詞,通常由字母、數(shù)字和下劃線組成,不能以數(shù)字開頭,不能與關(guān)鍵字重復(fù),并且區(qū)分大小寫。變量名、函數(shù)名、類名、常量名等等,都是標志符。所有的標志符都必須先定義,后使用。標志符有很多種用途,所以錯誤也有很多種原因。(1) 如果“xxxx”是一個變量名,那么通常是程序員忘記了定義這個變量,或者拼寫錯誤、大小寫錯誤所引起的,所以,首先檢查變量名是否正確。(關(guān)聯(lián):變量,變量定義)(2) 如果“xxxx”是一個函數(shù)名,那就懷疑函數(shù)名是否沒有定義???/p>

20、能是拼寫錯誤或大小寫錯誤,當然,也有可能是你所調(diào)用的函數(shù)根本不存在。還有一種可能,你寫的函數(shù)在你調(diào)用所在的函數(shù)之后,而你有沒有在調(diào)用之前對函數(shù)原形進行申明。(關(guān)聯(lián):函數(shù)申明與定義,函數(shù)原型)(3) 如果“xxxx”是一個庫函數(shù)的函數(shù)名,比如“sqrt”、“fabs”,那么看看你在cpp文件已開始是否包含了這些庫函數(shù)所在的頭文件(.h文件)。例如,使用“sqrt”函數(shù)需要頭文件math.h。如果“xxxx”就是“cin”或“cout”,那么一般是沒有包含“iostream.h”。(關(guān)聯(lián):#include,cin,cout)(4) 如果“xxxx”是一個類名,那么表示這個類沒有定義,可能性依然是:

21、根本沒有定義這個類,或者拼寫錯誤,或者大小寫錯誤,或者缺少頭文件,或者類的使用在申明之前。(關(guān)聯(lián):類,類定義)(5) 標志符遵循先申明后使用原則。所以,無論是變量、函數(shù)名、類名,都必須先定義,后使用。如使用在前,申明在后,就會引發(fā)這個錯誤。(6) C+的作用域也會成為引發(fā)這個錯誤的陷阱。在花括號之內(nèi)變量,是不能在這個花括號之外使用的。類、函數(shù)、if、do(while)、for所引起的花括號都遵循這個規(guī)則。(關(guān)聯(lián):作用域)(7) 前面某句語句的錯誤也可能導(dǎo)致編譯器誤認為這一句有錯。如果你前面的變量定義語句有錯誤,編譯器在后面的編譯中會認為該變量從來沒有定義過,以致后面所有使用這個變量的語句都報這

22、個錯誤。如果函數(shù)申明語句有錯誤,那么將會引發(fā)同樣的問題。 6 error C2086: 'xxxx' : redefinition編號:C2374直譯:“xxxx”重復(fù)申明。錯誤分析:變量“xxxx”在同一作用域中定義了多次。檢查“xxxx”的每一次定義,只保留一個,或者更改變量名。 7 error C2374: 'xxxx' : redefinition; multiple initialization編號:C2374直譯:“xxxx”重復(fù)申明,多次初始化。錯誤分析:變量“xxxx”在同一作用域中定義了多次,并且進行了多

23、次初始化。檢查“xxxx”的每一次定義,只保留一個,或者更改變量名。 8 C2143: syntax error : missing '' before (identifier) 'xxxx'編號:C2143直譯:在(標志符)“xxxx”前缺少分號。錯誤分析:這是VC6的編譯期最常見的誤報,當出現(xiàn)這個錯誤時,往往所指的語句并沒有錯誤,而是它的上一句語句發(fā)生了錯誤。其實,更合適的做法是編譯器報告在上一句語句的尾部缺少分號。上一句語句的很多種錯誤都會導(dǎo)致編譯器報出這個錯誤:(1) 上一句語句的末尾真的缺少分號。那么補上就可以了。(2) 上一句語句

24、不完整,或者有明顯的語法錯誤,或者根本不能算上一句語句(有時候是無意中按到鍵盤所致)。(3) 如果發(fā)現(xiàn)發(fā)生錯誤的語句是cpp文件的第一行語句,在本文件中檢查沒有錯誤,而且這個文件使用雙引號包含了某個頭文件,那么檢查這個頭文件,在這個頭文件的尾部可能有錯誤。 9 error C2137: empty character constant編號:C2137直譯:空的字符定義。錯誤分析:原因是連用了兩個單引號,而中間沒有任何字符。一般的,單引號表示字符型常量,單引號中必須有,也只能有一個字符(使用轉(zhuǎn)義符時,轉(zhuǎn)義符所表示的字符當作一個字符看待)。兩個單引號之間不加任何內(nèi)容是不允許的。

25、需要注意的是:如果單引號中的字符數(shù)是2-4個,編譯不報錯,輸出結(jié)果是這幾個字母的ASC碼作為一個整數(shù)(int,4B)整體看待的數(shù)字。如果單引號中的字符數(shù)多于4個,會引發(fā)2015錯誤:error C2015: too many characters in constant。 10 error C2374: 'xxxx' : redefinition; multiple initialization編號:C2374直譯:“xxxx”重復(fù)申明,多次初始化。錯誤分析:變量“xxxx”在同一作用域中定義了多次,并且進行了多次初始化。檢查“xxxx”的每一次定義,只保留一個,或者更改變量名。第二部分 鏈接錯誤1 error LNK2001: unresolved external symbol _main編號:LNK2001直譯:未解決的外部符號:_main。錯誤分析:缺少main函數(shù)??纯磎ain的拼寫或大小寫是否正確。 2 error LNK2005: _main already defined i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論