C語言常見編譯錯誤及分析大全


 

C語言常見編譯錯誤及分析大全

 

 

1 fatal error C1003: error count exceeds number; stopping compilation

中文對照:(編譯錯誤)錯誤太多,停止編譯

分析:修改之前的錯誤,再次編譯

 

2 fatal error C1004: unexpected end of file found

中文對照:(編譯錯誤)文件未結束

分析:一個函數或者一個結構定義缺少“}”、或者在一個函數調用或表達式中括號沒有配對出現、或者注釋符“/*…*/”不完整等

 

3 fatal error C1083: Cannot open include file: 'xxx': No such file or directory

中文對照:(編譯錯誤)無法打開頭文件xxx:沒有這個文件或路徑

分析:頭文件不存在、或者頭文件拼寫錯誤、或者文件為只讀

 

4 fatal error C1903: unable to recover from previous error(s); stopping compilation

中文對照:(編譯錯誤)無法從之前的錯誤中恢復,停止編譯

分析:引起錯誤的原因很多,建議先修改之前的錯誤

 

5 error C2001: newline in constant

中文對照:(編譯錯誤)常量中創建新行

分析:字符串常量多行書寫

 

6 error C2006: #include expected a filename, found 'identifier'

中文對照:(編譯錯誤)#include命令中需要文件名

分析:一般是頭文件未用一對雙引號或尖括號括起來,例如“#include stdio.h”

 

7 error C2007: #define syntax

中文對照:(編譯錯誤)#define語法錯誤

分析:例如“#define”后缺少宏名,例如“#define”

 

8 error C2008: 'xxx' : unexpected in macro definition

中文對照:(編譯錯誤)宏定義時出現了意外的xxx

分析:宏定義時宏名與替換串之間應有空格,例如“#define TRUE"1"”

 

9 error C2009: reuse of macro formal 'identifier'

中文對照:(編譯錯誤)帶參宏的形式參數重復使用

分析:宏定義如有參數不能重名,例如“#define s(a,a) (a*a)”中參數a重復

 

10 error C2010: 'character' : unexpected in macro formal parameter list

中文對照:(編譯錯誤)帶參宏的形式參數表中出現未知字符

分析:例如“#define s(r|) r*r”中參數多了一個字符‘|’

11 error C2014: preprocessor command must start as first nonwhite space

中文對照:(編譯錯誤)預處理命令前面只允許空格

分析:每一條預處理命令都應獨占一行,不應出現其他非空格字符

 

12 error C2015: too many characters in constant

中文對照:(編譯錯誤)常量中包含多個字符

分析:字符型常量的單引號中只能有一個字符,或是以“\”開始的一個轉義字符,例如“char error = 'error';”

 

13 error C2017: illegal escape sequence

中文對照:(編譯錯誤)轉義字符非法

分析:一般是轉義字符位於 ' ' 或 " " 之外,例如“char error = ' '\n;”

 

14 error C2018: unknown character '0xhh'

中文對照:(編譯錯誤)未知的字符0xhh

分析:一般是輸入了中文標點符號,例如“char error = 'E';”中“;”為中文標點符號

 

15 error C2019: expected preprocessor directive, found 'character'

中文對照:(編譯錯誤)期待預處理命令,但有無效字符

分析:一般是預處理命令的#號后誤輸入其他無效字符,例如“#!define TRUE 1”

 

16 error C2021: expected exponent value, not 'character'

中文對照:(編譯錯誤)期待指數值,不能是字符

分析:一般是浮點數的指數表示形式有誤,例如123.456E

 

17 error C2039: 'identifier1' : is not a member of 'identifier2'

中文對照:(編譯錯誤)標識符1不是標識符2的成員

分析:程序錯誤地調用或引用結構體、共用體、類的成員

 

18 error C2041: illegal digit 'x' for base 'n'

中文對照:(編譯錯誤)對於n進制來說數字x非法

分析:一般是八進制或十六進制數表示錯誤,例如“int i = 081;”語句中數字‘8’不是八進制的基數

 

19 error C2048: more than one default

中文對照:(編譯錯誤)default語句多於一個

分析:switch語句中只能有一個default,刪去多余的default

 

20 error C2050: switch expression not integral

中文對照:(編譯錯誤)switch表達式不是整型的

分析:switch表達式必須是整型(或字符型),例如“switch ("a")”中表達式為字符串,這是非法的

 

21 error C2051: case expression not constant

中文對照:(編譯錯誤)case表達式不是常量

分析:case表達式應為常量表達式,例如“case "a"”中“"a"”為字符串,這是非法的

 

22 error C2052: 'type' : illegal type for case expression

中文對照:(編譯錯誤)case表達式類型非法

分析:case表達式必須是一個整型常量(包括字符型)

 

23 error C2057: expected constant expression

中文對照:(編譯錯誤)期待常量表達式

 分析:一般是定義數組時數組長度為變量,例如“int n=10; int a[n];”中n為變量,這是非法的

 

24 error C2058: constant expression is not integral

中文對照:(編譯錯誤)常量表達式不是整數

分析:一般是定義數組時數組長度不是整型常量

 

25 error C2059: syntax error : 'xxx'

中文對照:(編譯錯誤)‘xxx’語法錯誤

分析:引起錯誤的原因很多,可能多加或少加了符號xxx

 

26 error C2064: term does not evaluate to a function

中文對照:(編譯錯誤)無法識別函數語言

分析:1、函數參數有誤,表達式可能不正確,例如“sqrt(s(s-a)(s-b)(s-c));”中表達式不正確 2、變量與函數重名或該標識符不是函數,例如“int i,j; j=i();”中i不是函數

 

27 error C2065: 'xxx' : undeclared identifier

中文對照:(編譯錯誤)未定義的標識符xxx

分析:1、如果xxx為cout、cin、scanf、printf、sqrt等,則程序中包含頭文件有誤 2、未定義變量、數組、函數原型等,注意拼寫錯誤或區分大小寫。

 

28 error C2078: too many initializers

中文對照:(編譯錯誤)初始值過多

分析:一般是數組初始化時初始值的個數大於數組長度,例如“int b[2]={1,2,3};”

 

29 error C2082: redefinition of formal parameter 'xxx'

中文對照:(編譯錯誤)重復定義形式參數xxx

分析:函數首部中的形式參數不能在函數體中再次被定義

 

30 error C2084: function 'xxx' already has a body

中文對照:(編譯錯誤)已定義函數xxx

分析:在VC++早期版本中函數不能重名,6.0版本中支持函數的重載,函數名可以相同但參數不一樣

 

31 error C2086: 'xxx' : redefinition

中文對照:(編譯錯誤)標識符xxx重定義

分析:變量名、數組名重名

 

32 error C2087: '<Unknown>' : missing subscript

中文對照:(編譯錯誤)下標未知

分析:一般是定義二維數組時未指定第二維的長度,例如“int a[3][];”

 

33 error C2100: illegal indirection

中文對照:(編譯錯誤)非法的間接訪問運算符“*”

分析:對非指針變量使用“*”運算

 

34 error C2105: 'operator' needs l-value

中文對照:(編譯錯誤)操作符需要左值

分析:例如“(a+b)++;”語句,“++”運算符無效

 

35 error C2106: 'operator': left operand must be l-value

中文對照:(編譯錯誤)操作符的左操作數必須是左值 分析:

例如“a+b=1;”語句,“=”運算符左值必須為變量,不能是表達式

 

36 error C2110: cannot add two pointers

中文對照:(編譯錯誤)兩個指針量不能相加

分析:例如“int *pa,*pb,*a; a = pa + pb;”中兩個指針變量不能進行“+”運算

 

37 error C2117: 'xxx' : array bounds overflow

中文對照:(編譯錯誤)數組xxx邊界溢出

分析:一般是字符數組初始化時字符串長度大於字符數組長度,例如“char str[4] = "abcd";”

 

38 error C2118: negative subscript or subscript is too large

中文對照:(編譯錯誤)下標為負或下標太大

分析:一般是定義數組或引用數組元素時下標不正確 error C2124: divide or mod by zero 中文對照:(編譯錯誤)被零除或對0求余 分析:例如“int i = 1 / 0;”除數為0

 

39 error C2133: 'xxx' : unknown size

中文對照:(編譯錯誤)數組xxx長度未知

分析:一般是定義數組時未初始化也未指定數組長度,例如“int a[];”

 

40 error C2137: empty character constant

中文對照:(編譯錯誤)字符型常量為空

分析:一對單引號“''”中不能沒有任何字符

 

41 error C2143: syntax error : missing 'token1' before 'token2'

42 error C2146: syntax 4error : missing 'token1' before identifier 'identifier'

中文對照:(編譯錯誤)在標識符或語言符號2前漏寫語言符號1

分析:可能缺少“{”、“)”或“;”等語言符號

 

43 error C2144: syntax error : missing ')' before type 'xxx'

中文對照:(編譯錯誤)在xxx類型前缺少‘)’

分析:一般是函數調用時定義了實參的類型

 

44 error C2181: illegal else without matching if

中文對照:(編譯錯誤)非法的沒有與if相匹配的else

分析:可能多加了“;”或復合語句沒有使用“{}”

 

45 error C2196: case value '0' already used

中文對照:(編譯錯誤)case值0已使用

分析:case后常量表達式的值不能重復出現

 

46 error C2296: '%' : illegal, left operand has type 'float'

47 error C2297: '%' : illegal, right operand has type 'float'

中文對照:(編譯錯誤)%運算的左(右)操作數類型為float,這是非法的

分析:求余運算的對象必須均為int類型,應正確定義變量類型或使用強制類型轉換

 

48 error C2371: 'xxx' : redefinition; different basic types

中文對照:(編譯錯誤)標識符xxx重定義;基類型不同

分析:定義變量、數組等時重名

 

49 error C2440: '=' : cannot convert from 'char [2]' to 'char'

中文對照:(編譯錯誤)賦值運算,無法從字符數組轉換為字符

分析:不能用字符串或字符數組對字符型數據賦值,更一般的情況,類型無法轉換

 

50 error C2447: missing function header (old-style formal list?)

51 error C2448: '<Unknown>' : function-style initializer appears to be a function definition

中文對照:(編譯錯誤)缺少函數標題(是否是老式的形式表?)

分析:函數定義不正確,函數首部的“( )”后多了分號或者采用了老式的C語言的形參表

 

52 error C2450: switch expression of type 'xxx' is illegal

中文對照:(編譯錯誤)switch表達式為非法的xxx類型

分析:switch表達式類型應為int或char

 

53 error C2466: cannot allocate an array of constant size 0

中文對照:(編譯錯誤)不能分配長度為0的數組

分析:一般是定義數組時數組長度為0

 

54 error C2601: 'xxx' : local function definitions are illegal

中文對照:(編譯錯誤)函數xxx定義非法

分析:一般是在一個函數的函數體中定義另一個函數

 

55 error C2632: 'type1' followed by 'type2' is illegal

中文對照:(編譯錯誤)類型1后緊接着類型2,這是非法的

分析:例如“int float i;”語句

 

56 error C2660: 'xxx' : function does not take n parameters

中文對照:(編譯錯誤)函數xxx不能帶n個參數

分析:調用函數時實參個數不對,例如“sin(x,y);”

 

57 error C2664: 'xxx' : cannot convert parameter n from 'type1' to 'type2'

中文對照:(編譯錯誤)函數xxx不能將第n個參數從類型1轉換為類型2

分析:一般是函數調用時實參與形參類型不一致

 

58 error C2676: binary '<<' : 'class istream_withassign' does not define this operator or a conversion to a type acceptable to the predefined operator error C2676: binary '>>' : 'class ostream_withassign' does not define this operator or a conversion to a type acceptable to the predefined operator

分析:“>>”、“<<”運算符使用錯誤,例如“cin<<x; cout>>y;”

 

59 error C4716: 'xxx' : must return a value

中文對照:(編譯錯誤)函數xxx必須返回一個值

分析:僅當函數類型為void時,才能使用沒有返回值的返回命令。

 

60 fatal error LNK1104: cannot open file "Debug/Cpp1.exe"

中文對照:(鏈接錯誤)無法打開文件Debug/Cpp1.exe

分析:重新編譯鏈接

 

61 fatal error LNK1168: cannot open Debug/Cpp1.exe for writing

中文對照:(鏈接錯誤)不能打開Debug/Cpp1.exe文件,以改寫內容。

分析:一般是Cpp1.exe還在運行,未關閉

 

62 fatal error LNK1169: one or more multiply defined symbols found

中文對照:(鏈接錯誤)出現一個或更多的多重定義符號。

分析:一般與error LNK2005一同出現

 

63 error LNK2001: unresolved external symbol _main

中文對照:(鏈接錯誤)未處理的外部標識main

分析:一般是main拼寫錯誤,例如“void mian()”

 

64 error LNK2005: _main already defined in Cpp1.obj

中文對照:(鏈接錯誤)main函數已經在Cpp1.obj文件中定義

分析:未關閉上一程序的工作空間,導致出現多個main函數

 

65 warning C4003: not enough actual parameters for macro 'xxx'

中文對照:(編譯警告)宏xxx沒有足夠的實參

分析:一般是帶參宏展開時未傳入參數

 

66 warning C4067: unexpected tokens following preprocessor directive - expected a newline

中文對照:(編譯警告)預處理命令后出現意外的符號 - 期待新行

分析:“#include<iostream.h>;”命令后的“;”為多余的字符

 

67 warning C4091: '' : ignored on left of 'type' when no variable is declared

中文對照:(編譯警告)當沒有聲明變量時忽略類型說明

分析:語句“int ;”未定義任何變量,不影響程序執行

 

68 warning C4101: 'xxx' : unreferenced local variable

中文對照:(編譯警告)變量xxx定義了但未使用

分析:可去掉該變量的定義,不影響程序執行

 

69 warning C4244: '=' : conversion from 'type1' to 'type2', possible loss of data

中文對照:(編譯警告)賦值運算,從數據類型1轉換為數據類型2,可能丟失數據

分析:需正確定義變量類型,數據類型1為float或double、數據類型2為int時,結果有可能不正確,數據類型1為double、數據類型2為float時,不影響程序結果,可忽略該警告

 

70 warning C4305: 'initializing' : truncation from 'const double' to 'float'

中文對照:(編譯警告)初始化,截取雙精度常量為float類型

分析:出現在對float類型變量賦值時,一般不影響最終結果

 

71 warning C4390: ';' : empty controlled statement found; is this the intent?

中文對照:(編譯警告)‘;’控制語句為空語句,是程序的意圖嗎?

分析:if語句的分支或循環控制語句的循環體為空語句,一般是多加了“;”

 

72 warning C4508: 'xxx' : function should return a value; 'void' return type assumed

中文對照:(編譯警告)函數xxx應有返回值,假定返回類型為void

分析:一般是未定義main函數的類型為void,不影響程序執行 c語言的錯誤對照表———— 在遇到錯誤時可以對照查看

 

73 warning C4552: 'operator' : operator has no effect; expected operator with side-effect

中文對照:(編譯警告)運算符無效果;期待副作用的操作符

分析:例如“i+j;”語句,“+”運算無意義

 

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

中文對照:(編譯警告)“==”運算符無效;是否為“=”?

分析:例如 “i==j;” 語句,“==”運算無意義

 

75 warning C4700: local variable 'xxx' used without having been initialized

中文對照:(編譯警告)變量xxx在使用前未初始化

分析:變量未賦值,結果有可能不正確,如果變量通過scanf函數賦值,則有可能漏寫“&”運算符,或變量通過cin賦值,語句有誤

 

76 warning C4715: 'xxx' : not all control paths return a value

中文對照:(編譯警告)函數xxx不是所有的控制路徑都有返回值

分析:一般是在函數的if語句中包含return語句,當if語句的條件不成立時沒有返回值

 

77 warning C4723: potential divide by 0

中文對照:(編譯警告)有可能被0除

分析:表達式值為0時不能作為除數

 

78 warning C4804: '<' : unsafe use of type 'bool' in operation

中文對照:(編譯警告)‘<’:不安全的布爾類型的使用

分析:例如關系表達式“0<=x<10”有可能引起邏輯錯誤

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM