C错误代号总结.docx
- 文档编号:18075959
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:20
- 大小:25.95KB
C错误代号总结.docx
《C错误代号总结.docx》由会员分享,可在线阅读,更多相关《C错误代号总结.docx(20页珍藏版)》请在冰点文库上搜索。
C错误代号总结
1警告信息
1.'xxxxxxxx'declaredbutneveruse
说明了'xxxxxxxx'但未使用。
在源文件中说明了改变量,但没有使用。
2.'xxxxxxxx'isassignedavaluewhichisneverused
'xxxxxxxx'被赋以一个不使用的值。
该变量出现一个赋值语句中,但直到函数结束都未使用过。
3.'xxxxxxxx'notpartofstructure
'xxxxxxxx'不是结构的一部分。
出现在点(.)或箭头(->)左边的域名不是结构的一部分;或者点的左边不指向结构。
4.'ambiguousoperatorsneedparentheses'
二义性操作符需要括号。
如:
两个位移、关系或按位操作符在一起使用而不加括号,一加法或减法操作符不加括号与一位操作符出现在一起
5.bothreturnandreturnofavalueused
即用返回又用返回值。
编译程序发现一个与前面的RETURN语句不一致的RETURN语句。
当某函数只在部分RETURN语句中返回值时,一般会发生本错误。
6.calltofunctionwithprototype
调用无原型函数。
“原型请求”警告可用,且又调用了一无原型函数。
7.calltofunction'xxxx'withprototype
调用无原型的'xxxx'函数。
原型请求”警告可用,且又调用了一个原先没有原型的函数'xxxx'。
8.codehasnoeffect
代码无效。
编译程序遇到一个含无效操作符的语句,如“a+b;”,对每一变量都不起作用,且可能要引起一个错误。
9.constantislong
常量是Long类型。
当编译程序遇到一个十进制常量大于32767,或一个八进值常量大于65535,而其后没有字母“I”或“L”时,把此常量当作Long类型处理。
10.constantoutofrangeincomparision
比较时常量超出了范围。
在源文件中有一比较,其中一个常量子表达式超出了另一个子表达式类型所允许的范围。
如:
一个无符号量与-1比较就没有意义。
为了得到一个大于32767(十进制)的无赋好书,可以在常量前面加上unsigned(如(unsigned)65535),或在常量后加上字母“u”或“U”(如65535u)
11.conversionmaylosesignificantdignits
转换可能丢失高位数字。
在赋值操作或其他情况下,源程序要求把long或unsignedlong类型转换成int或undesignedint类型。
12.functionshoultreturnavalue
函数应返回一个值。
源文件中说明的当前函数的返回类型即非int型也非void行,编译程序未发现返回值。
13.mixingpointertosignedandunsignedchar
混淆signed和unsignd字符指针。
没有通过显示的强制类型转换,就把一个字符指针转换为无符号指针,或相反。
14.nodeclarationforfunction'xxxxxxxx'
函数'xxxxxxxx'没有说明。
“说明请求”警告可用,而又调用了一个预先没有说明的函数。
15.non-portablepointerassignment
不可移植指针赋值。
源文件中把一个指针赋给另一个非指针,或相反。
但作为特例,可以把常量赋个一个指针,此时可强行抑制本警告。
16.non-portablepointercomparision
不可移植指针比较。
源文件中把一个指针与另一个非指针做比较。
但作为特例,可以把常量零予以个指针做比较,此时可强行抑制本警告。
17.non-portablereturntypeconversion
不可移植返回类型转换。
Return语句中的表达式类型和函数说明的不一致。
作为特例,如果函数或返回值表达式为一个指针时可以的,在这种情况下,返回指针的函数可能返回一个常量零,被转换成一个合适的指针值。
18.parameter'xxxxxxxx'isneverused
参数'xxxxxxxx'没有使用。
函数说明中的某参数在函数体中从未使用,通常是由于参数名拼写错误引起的。
如果在函数体中该标识符被重新定义为一个自动(局部)变量,也将发生本警告。
该参数被标识为自动变量但未使用。
19.possiableuseof'xxxxxxxx'beforeused
在定义'xxxxxxxx'之前可能已使用。
源文件中的某一表达式中使用了未经符值的变量,编译程序队员文件进行简单扫描已确定此文件。
如果该变量出现的物理位置在对它赋值之前,就会产生本警告,当然,程序的实际流程可能在使用前已赋值。
20.possibleincorrectassignment
可能的不正确赋值。
例如,编译程序遇到赋值操作符作为条件表达式(如if、while、do-while语句的一部分)的主操作符,这通常是由于把赋值号当作等号使用了。
如希望禁止此警告,可把赋值语句用括号括起来,并把它与零作显示比较,如:
if(a=b)…应写为if((a=b)!
=0)…
21.redefinitionof'xxxxxxxx'isnotidentical
'xxxxxxxx'重定义不相同。
源文件中对命令宏重定义时,使用的正文内容与第一次定义的不相同,新内容将代替旧内容。
22.restartingcompilerusingassembly
用汇编重新启动编译。
编译程序遇到一个未使用命令行选择项-B或#pragmainline语句的asm。
23.structurepassedbyvalue
结构安值传送。
通常是在编制程序时,把结构作为参数传递,而又漏掉了地址操作符(&)。
24.superfluous&withfunctionorarray
在函数或数组重油多余的符号“&”。
取值操作符(&)对一个数组或函数名是不必要的。
应该去除。
25.suspiclouspointerconversion
值得怀疑的指针转换。
编译程序遇到一些指针转换,这些转换引起指针指向不同的类型。
26.undefinedstructure'xxxxxxxx'
结构'xxxxxxxx'未定义。
在源文件中使用了该结构,但为定义,。
这可能是由于结构名拼写错误或忘记定义引起的。
27.unknownassemblerinstruction
不认识的汇编指令。
编译程序发现在插入的汇编语句中有一个不允许的操作符
28.unreachablecode
不可达代码。
Break,continue,goto或return语句后没有跟标号或循环函数的结束符。
编译程序使用一个常量测试条件来检查while,do和for循环,并试图知道循环没有失败。
29.voidfunctionmaynotreturnavalue
void函数不可以返回值。
源文件中的当前函数说明为void,但编译程序发现一个带常值的返回语句,该返回语句的值将被忽略。
30.zerolengthstructure
结构长度为零。
在源文件中定义了一个总长度为零的结构,对此结构的任何使用都是错误的。
2编译错误信息
编译系统查出的源程序错误分为三类:
致命错误、一般错误和警告错误。
致命错误一般很少出现,它通常是内部编译出错。
一旦出现这类错误,编译立即停止。
所谓一般普通错误通常是指源程序中的语法错误、存取数据错误或命令错误等。
编译系统遇到这类错误时,一般也要停止编译。
警告信息是指出一些值得怀疑的情况,而这些情况有可能是源程序中合理的一部分。
因此警告信息只是提醒用户注意,编译过程并不停止。
编译系统在发现源程序中各类的错误时,首先显示错误信息,然后显示源文件名以及出错的行号。
但必须注意,真正有错误的位置可能在前一行,甚至可能在前几行,有时,好像发生了许多错误,而实际上可能是有一个错误造成的。
下面列出常见的一些编译错误信息,并指出可能的原因。
附录1.1致命错误
1.Badcallofin-linefunction
在使用一个宏定义的内部函数时,未能正确调用。
一个内部函数应以两个短下划线(__)开始和结束。
2.Irreducibleexpressiontree
不可约束的表达式树。
这种错误是指源文件行中的表达式太复杂,编译系统中的代码生成程序不能为它产生代码,因此,这种表达式应避免使用。
3.Registerallocationfailure
4.寄存器分配失败。
一般错误
1.#operatornotfollowedbymactoargumentname
“#”运算符后无宏变元名。
在宏定义中,“#”用于标志一宏变元是一个串,因此,在“#”后面必须跟随一个宏变元名。
2.“xxxxxxxx”notaangument
“xxxxxxxx”不是函数参数。
在源程序中将该标识符定义为一个函数,但它没有在函数中出现。
3.Ambiguoussymbol“xxxxxxxx”
二义性符号“xxxxxxxx”。
两个或两个以上结构的某一域名相同,但它们的偏移、类型不同,因此,在变量或表达式中引用该域但未带结构名时,就会产生二义性。
在这种情况下,需要修改域名,或在引用时加上结构名。
4.Argument#missingname
参数#名丢失。
参数名已脱离用于定义函数的函数原型。
C语言规定,如果函数以原型定义,该函数必须包含所有的函数名。
5.Argumentlistsyntaxerror
参数表现出语法错误。
C语言规定,函数调用的各参数之间必须以逗号分隔,并以右括号结束。
若源文件中含有一个其后不是逗号也不是右括号的参数,则会出现本错误。
6.Arrayboundsmissing
数组的界限符“]”丢失。
在源文件中定义了一个数组,但此数组没有一右方括号结束,则会出现本错误。
7.Arraysizetoolarge
数组长度太长。
定义的数组太大,可用内存不够。
8.Assemblerstatementtoolong
汇编语句太长。
C语言规定,内部汇编语句最长不能超过480个字节。
9.Badconfigurationfile
配置文件不正确。
TURBOR.CFG配置文件中包含不是合适命令行选择项的肥注视文字。
C语言规定,配置文件命令选择项必须以一短横线(_)开始。
10.Badfilenameformatinincludedirective
包含指令中文件名格式不正确。
包含文件名必须用双引号(如"filename")或尖括号(如
如果使用了宏,则产生的扩展文本也不正确(因为无引号)。
11.Badifdefdirectivesyntax
ifdef指令语法错误。
#ifdef必须以单个标识符作为该指令的体。
12.Badifndefdirectivesyntax
ifndef指令语法错误。
#ifndef必须以单个标识符作为该指令的体。
13.Badundefdirectivesyntax
undef指令语法错误。
#undef()必须以单个标识符作为该指令的体。
14.Badfilesizesyntax
位字段长语法错误。
一个位字段长必须是1~16为的常量表达式。
15.Callofnon-function
调用未定义的的函数。
正被调用的函数未定义,通常是由于不正确的函数声明或函数名拼写错误所造成。
16.Cannotmodifyaconstobject
不能修改一个常量对象。
对定义为常量的对象进行不合法的操作(如对常量进行赋值)会产生本错误。
17.Caseoutsideofswitch
case出现在switch的外面。
编译程序发现case语句在switch的外面,通常是由于括号不匹配所造成。
18.Casestatementmissing
case语句漏掉。
Case语句必须包含一个以冒号结束的常量表达式,可能的原因是丢的冒号或在冒号千多了别的符号。
19.Castsyntaxerror
Cast语法错误。
可能在Cast中包含了一些不正确的符号。
20.Characterconstanttoolong
字符常量太长。
21.Compoundstatementmissing
复合语句漏掉。
编译程序扫描到源文件末时为发现结束大括号号,通常是由于大括号不匹配造成。
22.Conflictingtypemodifiers
类型修饰符冲突。
对同一指针只能制定一种变址修饰符(如near或far);而对同一函数也只能给出一种语言修饰符(如cdecl、pascal、或interrupt)。
23.Constantexpressionrequired
要求常量表达式。
数组的大小必须是常量,本错误通常是由于#define常量的拼写错误造成。
24.Couldnotfindfile‘xxxxxxxx.xxx’
找不到文件‘xxxxxxxx.xxx’。
编译程序找不到命令行上给出的文件。
25.Declarationmissing
说明漏掉“;”。
在源文件中包含了一个struct或union域声明,但后面漏掉了分号(;)。
26.Declarationneedstypeorstorageclass
说明必须给出类型或存储类。
如以下说明是错误的:
i,j;
27.Declarationsyntaxerror
说明出现语法错误。
在源文件中,某个说明丢失了某些符号或有多余的符号。
28.defaultoutsideswitch
default在switch外出现。
这个错误通常是由于括号不匹配造成。
29.Definedirectiveneedsneedsanidenfier
define指令必须有一个标识符。
#define后面的第一个非空格字符必须是一个标识符,若编译程序发现一些其它字符,则出现本错误。
30.DivisionbyZero
除数为零。
在源文件的表达式中出现除数为零的情况。
31.Dostatementmusthavewhile
do语句中必须要有while.。
32.Do-whilestatementmissing(
do-while语句漏掉了"("。
33.Do-whilestatementmissing(
do-while语句漏掉了")"。
34.Do-whilestatementmissing;
do-while语句漏掉了";"。
35.DuplicateCase
case的情况不唯一。
Switch语句中的每个case必须有一个唯一的常量表达式。
36.Enumsyntaxerror
enum语法错误。
Enum说明的表示附表的格式不对。
37.Enumerationconstantsyntaxerror
枚举常量语法错误。
赋给enum类型变量的表达式不是常量。
38.ErrorDirective;xxxx
error指令:
xxxx。
源文件处理#error指令时,显示该指令指出的信息。
39.Errorwritingoutputfile
写输出文件出现错误。
通常是由于磁盘空间不够造成。
40.Expressionsyntax
表达式语法错误。
如:
在表达式中连续出现两个操作符、括号不匹配或缺少括号、前一语句漏掉了分号等。
41.Extraparameterincall
调用时出现多余参数。
在调用一函数时,实际的参数个数多于函数定义中的参数个数。
42.Extraparameterincalltoxxxxxxxx
调用xxxxxxxx函数时出现了多余的参数。
其中该函数由原型定义。
43.Filenametoolong
文件名过长。
#include指令中给出的文件名太长,编译程序无法处理。
DOS下的文件名不能超过64个字符。
44.Forstatementmissing(
for语句漏掉“(”。
45.Forstatementmissing)
for语句漏掉“)”。
46.Forstatementmissing;
for语句漏掉“;”。
47.Fuctioncallmissing)
函数调用缺少“)”。
48.Functiondefinitionoutofplace
函数定义位置错误。
函数定义不能出现在另一函数内。
函数内的任何说明,只要以类似与带有一个参数表的函数开始,就被认为是一个函数定义。
49.Functiondoesn'ttakeavariablenumberofargument
函数不接受可变的参数个数。
源文件中的某个函数内使用了va-start宏,此函数不能接受可变数量的参数。
50.Gotostatementmissinglable
goto语句缺少标号。
在goto关键字后必须由一个标识符。
51.Ifstatementmissing(
if语句缺少“(”。
52.Ifstatementmissing)
if语句缺少“)”。
53.Illegalcharacter(0Xxx)
非法字符(0Xxx)。
编译程序发现输入文件中有非法字符,一十六进制方式打印该字符。
54..Illegalinitialization
非法初始化。
初始化必须是常量表达式后一全局变量extern或static的地址加减一常量。
55.Illegaloctaldigit
非法八进指数。
编译程序发现在一个八进制常数中包含了非八进制数字符号(如8或9)。
56.Illegalpointersubtraction
非法指针相减。
这是由于试图以一个非指针变量减去一个指针变量而造成的。
57.Illegalstructureoperation
非法结构操作。
结构只能使用(.)、取地址符(&)和赋值操作符(=),或作为函数的参数传递。
当编译程序发现结构使用了其它操作符时出现本错误。
58.Illegaluseoffloatingpoint
非法的浮点操作。
浮点操作数不允许出现在移位、按位逻辑操作、条件(?
:
)、间接(*)以及其它一些操作符中。
59.Illegaluseofpointer
非法使用指针。
指针只能在加、减、赋值、比较、间接(*)或箭头(→)操作中使用。
60.Improperuseofatypedefsymbol
typedef符号使用不对。
源文件中使用了一个符号,符号变量应在一个表达式中出现。
检查一下此符号的说明和可能的拼写错误。
61.In-lineassemblynotallowed
不允许内部汇编语句。
源文件中包含有直接插入的汇编语句,若在集成环境下进行编译,则要出现本错误,必须使用TCC命令编译该文件。
62.Incompatiblestorageclass
不相容的存储类。
源文件的一个函数定义中使用了extern关键字,而只有static(或根本没有存储类型)是允许的。
63.Incompatibletypeconversion
不相容的类型转换。
源文件中试图把一种类型转换成另一种类型,但这两种类型是不相容的。
如函数与非函数间转换、一种结构或数组与一种标准类型间转换、浮点数与指针间转换等。
64.Incorrectcommandlineargument:
xxxxxxxx
不正确的命令行参数:
xxxxxxxx.
65.Incorrectcinfigurationfileargument:
xxxxxxxx
不正确的配置文件参数:
xxxxxxxx。
编译程序认为该配置文件是非法的,此时可检查一下前面的短横线(-)。
66.Incorrectnumberformat
不正确的数据格式。
编译程序发现在十六进制树种出现十进制小数点。
67.Incorrectuseofdefault
default的不正确使用。
编译程序发现default关键字后缺少分号。
68.Initializersyntaxerror
初始化语法错误。
初始化过程中缺少了操作符,括号不匹配,或其他一些不正常的情况。
69.Invalidindirection
无效的间接运算。
间接运算符(*)要求非控制真作为操作分量。
70.Invalidmacroargumentseparator
无效的宏参数分隔符。
在宏定义中,各参数必须永逗号分隔。
编译程序发现在参数后面有其它非法字符。
71.Invalidpointeraddition
无效的指针相加。
源程序中试图把两个指针相加。
72.Invaliduseofarro
箭头使用错。
在箭头操作符(→)后必须跟一标识符。
73.Invaliduseofdot
点使用错。
在点操作符(.)后必须跟一标识符。
74.Lvaluerequired
请求赋值。
赋值操作符的左边必须是一个地址表达式、包括数值变量、指针变量、结构引用域、间接指针或数祖分量。
75.Macroargumentsyntaxerror
宏参数语法错误。
宏定义中的参数必须是一个表示符。
编译擦程序发现所需的参数不是表示符的字符,则出现本错误。
76.Macroexpansiontoolong
宏扩展太长。
一个宏扩展不能多于4096个字符。
当宏递归扩展自身时,常出现本错误。
宏不能对自身进行扩展。
77.Maycompileonlyonefilewhenanoutputfilenameisgiven
给出一个输出文件名时,可能只编译一个文件。
在命令行编译时,若只使用-o选择,则只允许一个输出文件名。
此时,只编译第一个文件,其它文件被忽略。
78.Mismatchnumberofparametersindefinition
定义中参数各数不匹配。
定义中的参数和函数原型中提供的信息不匹配。
79.Misplacedbreak
break位置错误。
编译程序发现break语句在switch语句或循环外。
80.Misplacedcontinue
continue位置错误。
编译程序发现continue语句在循环结构外。
81.Misplacedelse
十进制小数点位置错。
编译程序发现浮点常数的指数部分有一个十进制小数点。
82.Misplacedelse
else位置错。
编译程序发现else语句缺少与之相配套的if语句。
本错误的产生除了由于else多余外,还有可能是由于有多余的分号、漏写了大括号或前面的if语句出现语法错误引起的。
83.Misplacedelifdirective
elif指令位置错误。
编译命令没有发现与#enif指令相配的#if、#ifdef或#ifndef指令。
84Misplacedelsederective
else指令位置错误。
编译命令没有发现与#else指令相配的#if、#ifdef或#ifndef指
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 错误 代号 总结