c语言源程序常见错误分类及其改错文档格式.doc
《c语言源程序常见错误分类及其改错文档格式.doc》由会员分享,可在线阅读,更多相关《c语言源程序常见错误分类及其改错文档格式.doc(22页珍藏版)》请在冰豆网上搜索。
因为C并不限定在正文的某行放一条语句,这样,真正产生错误的行可能在编译指出的前一行或几行。
在下面的信息列表中,我们指出了这种可能。
致命错误
1.Badcallofin-linefunction内部函数非法调用
在使用一个宏定义的内部函数时,没有正确调用。
一个内部函数以双下划线(__)开始和结束。
2.Irreducibleexpressiontree不可约表达式树
这种错误是由于源文件中的某些表达式使得代码生成程序无法为它产生代码。
这种表达式必须避免使用。
3.Registerallocationfailure存储器分配失效
这种错误指的是源文件行中的表达式太复杂,代码生成程序无法为它生成代码。
此时应简化这种繁杂的表达式或干脆避免使用它。
一般错误
1.#operatornotfollowedbymacroargumentname
#运算符后无宏变量名。
在宏定义中,#用于标识一宏变量名。
“#”后必须跟一宏变量名。
2.’xxxxxx’notanargument
’xxxxxx’不是函数参数。
在源程序中将该标识符定义为一个函数参数,但此标识符没有在函数表中出现。
3.Ambiguoussymbol’xxxxxx’
二义性符号’xxxxxx’。
两个或多个结构的某一域名相同,但具有的偏移、类型不同。
在变量或表达式中引用该域而未带结构名时,将产生二义性,此时需修改某个域名或在引用时加上结构名。
4.Argument#missingname
参数#名丢失。
参数名已脱离用于定义函数的函数原型。
如果函数以原型定义,该函数必须包含所有的参数名。
5.Argumentlistsyntaxerror
函数表出现语法错误。
函数调用的参数间必须以逗号隔开,并以一右括号结束。
若源文件中含有一个其后不是逗号也不是右括号的参数,则出错。
6.Arrayboundsmissing
数组的界限符“]”丢失。
在源文件中定义了一个数组,但此数组没有以一右方括号结束。
7.Arraysizetoolarge
数组长度太大。
定义的数组太大,可用内存不够。
8.Assemblerstatementtoolong
汇编语句太长。
内部汇编语句最长不能超过480字节。
9.Badconfigurationfile
配置文件不正确。
TURBOC.CFG配置文件中包含不是合适命令行选择项的非注解文字。
配置文件命令选择项必须以一短横线(-)开始。
10.Badfilenameformatinincludedirective
使用include指令时,文件名格式不正确。
include文件名必须用引号(“filename.h”)或尖括号(<
filename.h>
)括起来,否则将产生此类错误。
如果使用了宏,则产生的扩展正文也不正确(因为无引号)。
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.Casesyntaxerror
Case语法错误。
Case中包含了一些不正确符号。
20.Characterconstanttoolong
字符常量太长。
字符常量只能是一个或两个字符长。
21.Compoundstatementmissing
复合语句漏掉了大括号“}”。
编译程序扫描到源文件末时。
未发现结束大括号,通常是由于大括号不匹配造成的。
22.Conflictingtypemodifiers
类型修饰符冲突。
对同一指针,只能指定一种变址修饰符(如near或far);
而对于同一函数,也只能给出一种语言修饰符(如cdecl、pascal或interrupt)。
23.Constantexpressionrequired
要求常量表达式。
数组的大小必须是常量,此类错误通常是由于#define常量的拼写出错而引起的。
24.Couldnotfind‘xxxxxxxx.xxx’
找不到‘xxxxxxxx’文件。
编译程序找不到命令行上给出的文件。
25.Declarationmissing
说明漏掉‘;
’。
在源文件中包含了一个struct或union域声明,但后面漏掉了分号(;
)。
26.Declarationneedstypeorstorageclass
说明必须给出类型或存储类。
说明必须包含一个类型或一个存储类。
27.Declarationsyntaxerror
说明出现语法错误。
在源文件中,某个说明丢失了某些符号或有多余的符号。
28.Defaultoutsideofswitch
Default在switch外出现。
编译程序发现default语句出现在switch语句之外,通常是由于括号不匹配造成的。
29.Defaultdirectiveneedsanidentifer
Default指令必须有一个标识符。
#define后面的第一个非空格符必须是一个标识符,若编译程序发现一些其他字符,则出现本错误。
30.DivisionbyZero
除数为零。
源文件的常量表达式中,出现除数为零的情况。
31.Dostatementmusthavewhile
Do语句中必须有while。
源文件中包含一个无while关键字的do语句时,出现此类错误。
32.Do-whilestatementmissing(
Do-while语句中漏掉了“(”。
在do语句中,编译程序发现while关键字后无左括号。
33.Do-whilestatementmissing)
Do-while语句中漏掉了“)”。
在do语句中,编译程序发现while关键字后无右括号。
34.Do-whilestatementmissing;
Do-while语句中漏掉了分号。
在do语句中的条件表达式中,编译程序发现右括号后面无分号。
35.DuplicateCase
Case后的常量表达式重复。
switch语句的每个case必须有一个唯一的常量表达式值。
36.Enumsyntaxerror
Enum语法出现错误。
enum说明的标识符表的格式不对。
37.Enumerationconstantsyntaxerror
枚举常量语法错误。
赋给enum类型变量的表达式值不为常量。
38.ErrorDirective:
xxx
Error指令:
xxx。
源文件处理#error指令时,显示该指令的信息。
39.Errorwritingoutputfile
写输出文件出现错误。
通常是由于磁盘空间满造成的,尽量删掉一些不必要的文件。
40.Expressionsyntax
表达式语法错误。
当编译程序分析一表达式发现一些严重错误时,出现此类错误,通常是由于两个连续操作符、括号不匹配或缺少括号、前一语句漏掉了分号等引起的。
41.Extraparameterincall
调用时出现多余参数。
调用函数时,其实际参数个数多于函数定义中的参数个数。
42.Extraparameterincalltoxxxxxxxx
调用xxxxxxxx函数时出现了多余的参数。
其中该函数由原型定义。
43.Filenametoolong
文件名太长。
#include指令给出的文件名太长,编译程序无法处理。
DOS下的文件名不能超过64个字符。