C语言错误表.docx
- 文档编号:4293259
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:24
- 大小:28.06KB
C语言错误表.docx
《C语言错误表.docx》由会员分享,可在线阅读,更多相关《C语言错误表.docx(24页珍藏版)》请在冰点文库上搜索。
C语言错误表
TurboC编译出错信息
TurboC编译程序查出的源程序错误分为三类:
严重错误、一般错误和警告。
(1)严重错误(fatalerror):
很少出现,它通常是内部编译出错。
在发生严重错误时,
编译立即停止,必须采取一些适当的措施并重新编译。
(2)一般错误(error):
指程序的语法错误以及磁盘、内存或命令行错误等。
编译程序将完成现阶段的编译,然后停止。
编译程序在每个阶段(预处理、语法分析、优化、代码生成)将尽可能多地找出源程序中的错误。
(3)警告(warning):
不阻止编译继续进行它指出一些值得怀疑的情况,而这些情
况本身又可以合理地作为源程序的一部分。
一旦在源文件中使用了与机器有关的结构,
编译程序就将产生警告信息。
编译程序首先输出这三类出错信息,然后输出源文件名和发现出错的行号,最后输出
信息的内容。
下面按字母顺序分别列出这三类出错信息。
对每一条信息,均指出了可能产生的原
因和纠正方法。
请注意出错信息处有关行号的一个细节:
编译程序仅产生检测到的信息。
因为C不
限定在正文的某行设置语句,这样,真正产生错误的行可能在指出行号的前一行或前几
行。
在下面的信息列表中,我们指出了这种情况。
1.严重错误
Badcallofinlinefunction内部函数的不合法调用
在使用一个宏定义的内部函数时,没有正确调用。
一个内部函数以两个下划线()
开始和结束。
Irreducibleexpressiontree不可约表达式树
文件中的表达式使得代码生成程序无法为其产生代码。
应避免使用这种表达式。
Registerallocationfailure存储器分配失败
源文件中的表达式太复杂,代码生成程序无法为它生成代码。
此时应简化这种繁琐
的表达式或干脆避免使用它。
2.一般错误
#operatornotfollowedbymacroargumentname“#”运算符后没跟宏变元名
在宏定义中,#用来标识一宏变元是串。
“#”后必须跟一宏变元名.
‘xxxxxxxx’notanargument“xxxxxxxx”不是函数参数
在源程序中将该标识符定义为一个函数参数,但此标识符没有在函数的参数表中
出现。
Ambiguoussymbol‘xxxxxxxx’歧义性符号“xxxxxxxx”
两个或多个结构体的某一域名(结构体变量)相同.但具有的位移、类型不同。
在变量
或表达式中引用这些结构体分量而未带结构名时,将产生歧义。
这时需修改某个域名或
在引用时加上结构名。
Argument#missingname参数#名丢失
参数名已脱离用于定义函数的函数原型。
如果函数以原型定义,则该函数必须包含
所有的参数名。
Argumentlistsyntaxerror参数表出现语法错误
函数调用的一组参数其间必须以逗号隔开,并以一右括号结束。
若源文件中含有一
个其后不是逗号也不是右括号的参数,则出现此错。
Arrayboundmissing数组的界限符“]”丢失
在源文件中定义了一个数组,但此数组没有以一右方括号结束。
Arraysizetoolarge数组长度过大
定义的数组太大,可用内存不够。
Assemblerstatementtoolong汇编语句太长
直接插入的汇编语句最长不能超过480字节。
Badconfigurationfile配置文件不正确。
TURBOC.CFG配置文件中包含不是合适命令行选择的非注释文字。
配置文件命令
选择项必须以一短横线(-)开始。
Badfilenameformatinincludedirective包含命令中文件名格式不正确
包含文件名必须用引号(“filename.h")或尖括号(
生此类错误。
如果使用了一个宏,则产生的扩展程序文本也是不正确的(因为没有加上
引号)。
Badifdefdirectivesyntaxifdef命令语法错误
#ifdef必须以单个标识符(仅此一个)作为该命令的体.
Badifndefdirectivesyntaxifndef命令语法错误
#ifndef必须以单个标识符(仅此一个)作为该命令的体。
Badundefdirectivesyntaxundcf命令语法错误
#undef必须以单个标识符(仅此一个)作为该命令的体。
Badfilesizesyntax位字段长语法错误
一个位字段长必须是1-16位的常量表达式。
Callofnon-function调用未定义函数
正被调用的函数无定义,通常是由于不正确的函数声明或函数名拼写错引起的.
Cannotmodifyaconstantobject不能修改一个常量对象
对定义为常量的对象进行不合法操作(例如常量的赋值)将引起本错误
Caseoutsideofswitchcase出现在switch外
编译程序发现case语句出现在switch语句外面,通常是由于括号不配对引起的.
Casestatementmissing:
case语句漏掉“:
”
case语句必须含有一个以冒号终结的常量表达式。
可能是丢了冒号或冒号前多了
别的符号。
Casesyntaxerrorcase语法错误
case中有一些不正确的符号。
Characterconstanttoolong字符常量太长
字符常量只能是一个或两个字符长.
Compoundstatementmissing}复合语句漏掉“}”
编译程序扫描到源文件结束时,未发现结束标记“}”,通常是由于花括号不配对引
起的。
Conflictingtypemodifiers类型修饰符冲突
对同一指针,只能指定一种变址修饰符(如near或far);同样对于同一函数,也只能
给出一种语言修饰符(如cdecl、pascal或interrupt)
Constantexpressionrequired要求常量表达式
数组的大小必须是常量。
本错误通常由于#define常量的拼写出错而引起.
Couldnotfindfile‘xxxxxxxx.xxx’找不到“xxxxxxxx.xxx”文件。
编译程序找不到命令行上给出的文件。
Declarationmissing;声明漏掉“;”
在源文件中包含一个类型或一个存储类,但后面漏掉了分号(;)。
Declarationneedstypeorstorageclass声明必须给出类型或存储类
声明必须包含一个类型或一个存储类,如声明:
“i,j;”是不正确的。
Declarationsyntaxerror声明出现语法错误
在源文件中,某个声明丢失了某些符号或有多余的符号。
DefaultoutsideofswitchDefault在switch外出现
编译程序发现default语句出现在switch语句之外,通常是由于括号不配对引起的。
DefinedirectiveneedsanidentifierDefine命令必须有一个标识符
#define后面的第一个非空格符必须是一标识符。
若编译程序发现一些其他字符,
则出现本错误。
Divisionbyzero除数为零
源文件的常量表达式中,出现除数为零的情况。
Dostatementmusthavewhiledo语句中必须有while
源文件中含有一无while关键字的do语句时,出现本错误。
Do-whilestatementmissing(do-while语句中漏掉了“(”
在do语句中,编译程序发现while关键字后无左括号。
Do-whilestatementmissing)do-while语句中漏掉了“)”
在do语句中,编译程序发现条件表达式后无右括号。
Do-whilestatementmissing;do-while语句中漏掉了分号
在do语句中的条件表达式中,编译程序发现右括号后面无分号。
Duplicatecasecase的情况值不唯一
switch语句的每个case必须有一个唯一的常量表达式值。
Enamsyntaxerrorenum语法错
enum声明的标识符表的格式不对。
Enumerationconstantsyntaxerror枚举常量语法错
赋给enum类型变量的表达式值不为常量,产生本错误。
ErrorDirective:
xxxxError命令:
xxxx
处理源文件中的#error命令时.显示该命令定义的信息。
Errorwritingoutputfile写输出文件错
通常是由于磁盘空间引起的,可能要删除一些不必要的文件,重新编泽。
Expressionsyntax表达式语法错
当编译程序分析一表达式并发现一些严重错误时,出现本错误。
通常是由于两个连
续操作符、括号不配对或缺少括号,以及前一语句漏掉了分号等引起的。
Extraparameterincall调用时出现多余参数
调用函数时,其实际参数个数多于函数定义中的参数个数。
Extraparameterincalltoxxxxxxxx调用xxxxxxxx函数时出现了多余的参数
调用个指定的函数时(该函数由原型定义)出现了过多的参数。
Filenametoolong文件名太长
#include命令给出的文件名太长,编译程序无法处理。
DOS中的文件名不应超过
64个字符。
Forstatementmissing(for语句漏掉“(”
编译程序发现在for关键字后缺少左括号
Forstatementmissing)for语句缺少“)”
在for语句中,编译程序发现在控制表达式后缺少右括号。
Forstatementmissing;for语句缺少“;”
在for语句中,编译程序发现在某个表达式后缺少分号。
Functioncallmissing)函数调用缺少“)”
函数调用的参数表有几种语法错误,如左括号漏掉或括号不配对。
Functiondefinitionoutofplace函数定义位置错
函数定义不可出现在另一函数内。
函数内的任何声明,只要以类似于带有一个参数
表的函数开始,就被认为是一个函数定义。
Functiondoesn'ttakeavariableofargument函数不接受可变的参数个数
源文件夹中的某个函数内使用了va_start宏,此函数不能接受可变数量的参数。
Gotostatementmissinglabelgoto语句缺少标号
在goto关键字后面必须有一个标号。
Ifstatementmissing(if语句缺少“(”
在if语句中,编译程序发现if关键字后面缺少左括号。
Ifstatementmissing)if语句缺少“)”
在if语句中,编译程序发现测试表达式后缺少右括号。
Illegalcharacter‘c’(OxXX)非法字符‘c’(OxXX)
编译程序发现输入文件中有一些非法字符,即以十六进制形式打印的字符口。
IIIegalinitialization非法初始化
初始化必须是常量表达式,或是一个全局变量extern,或是static的地址加减一
常量。
Illegaloctaldigit非法八进制数
编译程序发现一个八进制常数中包含了非八进制数字(例如8或,9)。
Illegalpointersubtraction非法指针相减
这是由于试图以一个非指针变量减去一个指针变量而造成的。
Illegalstructureoperation非法结构操作
结构只能使用(.)、取地址(&)和赋值(=)操作符,或作为函数的参数传递。
当编译
程序发现结构使用了其他操作符时,出现本错误。
Illegaluseoffloatingpoint非法浮点运算
浮点运算分量不允许出现在移位运算符、按位逻辑运算符、条件(?
:
)、间接(*)以
及其他一些运算符中。
编译程序发现上述运算符中使用了浮点运算分量时,出现本错误。
Illegaluseofpoint指针使用不合法
施于指针的运算符只能是加、减、赋值、比较、间接(*)或箭头。
如用其他运算符,则出现本错误。
Improperuseofatypedefsymboltypedef符号使用不当
源文件中使用了一个typedef符号,符号变量应出现在一个表达式中。
检查一下此
符号的说明和可能的拼写错误。
In-lineassemblynotallowed不允许直接插入的汇编语句
源文件中含有直接插入的汇编语句,若在集成环境下进行编译,则出现本错误。
必须
使用Tcc命令行编译此文件。
Incompatiblestorageclass不相容的存储类
源文件的一个函数定义中使用了extern关键字,但只有static(或根本没有存储类
型)是允许的。
Incompatibletypeconversion不相容的类型转换
源文件中试图把一种类型转换成另一种类型,但这两种类型是不相容的。
例如,函数
与非函数间转换,一种结构体或数组与一种标准类型的转换,浮点数和指针间转换等。
Incorrectcommandlineargument:
xxxxxxxx不正确的命令行参数:
xxxxxxxx
编译程序视此命令行参数是非法的。
Incorrectconfigurationfileargument:
xxxxxxxx不正确的配置文件参数:
xxxxxxxx
编译程序视此配置文件是非法的。
检杳一下前面的短横线(-)。
Incorrectnumberformat不正确的数据格式
编译程序发现在十六进制数中出现十进制小数点。
Incorrectuseofdefaultdefault使用错
编译程序发现default关键字后缺少分号.
Initializesyntaxerror初始化语法错误
初始化过程缺少或多出了运算符,或出现括号不匹配及其他不正常情况.
Invalidindirection间接运算符错
间接运算符(*)要求非空指针作为运算分量。
Invalidmacroargumentseparator无效的宏参数分隔符
在宏定义中,参数必须用逗号分。
编泽程序发现在参数名后面有其他非法字符时,
出现本错误。
Invalidpointeraddition无效的指针相加
源程序中试图把两个指针相加。
Invaliduseofarrow箭头使用错
在箭头运算符后必须跟一标识符。
Invaliduseofdot点使用错
在点(.)运算符后必须跟一标识符。
Lvaluerequired赋值请求
赋值运算符的左边必须是一个地址表达式,包括数值变量、指针变量、结构引用域、间
接指针和数组分量。
Macroargumentsyntaxerror宏参数语法错误
宏定义中的参数必须是一个标识符。
若编译程序发现所需要的参数不是标识符的字
符,则出现本错误。
Macroexpansiontoolong宏扩展太长
一个宏扩展不能多于1096个字符。
当宏递归扩展自身时,常出现本错误。
宏不能对
自身进行扩展。
Maycompliedonlyonefilewhenanoutputfilenameisgiven给出一个输出文件名时可能只编译一个文件
在命令行编译中使用-o选择,只允许一个输出文件名,此时只编译第一个文件,其
他文件被忽略。
Mismatchnumberofparametersindefinition函数定义中参数个数不匹配
函数定义中的参数和函数原型中提供的信息不匹配。
Misplacedbreakbreak位置错误
编译程序发现break语句在switch语句或循环结构之外。
Misplacedcontinuecontinue位置错误
编译程序发现continue语句在循环结构之外。
Misplaceddecimalpoint十进制小数点位置错
编泽程序发现浮点常数的指数部分有一个十进制小数点。
Misplacedelseelse位置错
编泽程序发现else语句缺少与之相匹配的if语句。
本错误的产生,除了由于else多
余外,还有可能由于多余的分号或漏写了大括号及前面if语句出现语法错误而引起。
Misplaceelifdirectiveelif命令位置错
编译程序找不到与#elif命令相匹配的#if、#ifdef或井ifndef命令。
Misplaceelsedirectiveelse命令位置错
编译程序找不到与#else命令相匹配的#if、#ifdef或#ifndef命令。
Misplacedendifdirectiveendif命令位置错
编泽程序找不到与#endif命令相匹配的#if、#ifdef或#ifndef命令。
Mustbeaddressable必须是可编址的
取址操作(&)作用于一个不可编址的对象,如寄存器变量。
Musttakeaddressormemorylocation地址运算符&作用于不可编址的表达式
源文件中对不可编址的表达式使用了地址操作符(&),如对寄存器变量。
Nofilenameending无文件名终止符
在#include语句中,文件名缺少正确的闭引号(“)或右尖括号(>)。
Nofilenamegiver未给出文件名
TurboC编译命令(TCC)中没有包含文件名。
必须指定一个源文件名。
Non-portablepointerassignment不可移植指针赋值
源程序中将一个指针赋给一个非指针或相反。
但作为特例,允许把常量零值赋给一
个指针。
如果合适,应该强行抑制本错误信息。
Non-portablepointercomparison不可移植指针比较
源程序中将一个指针和一个非指针(常量零除外)进行比较。
如果合适,应该强行抑
制本错误信息。
Non-portablepointerconversion不可移植返回类型转换
在返回语句中的表达式类型与函数说明中的类型不同。
但如果函数的返回表达式是
指针,则可以进行转换此时,返回指针的函数可能送回一常量零,而零被转换成一个适
当的指钊值。
Notanallowedtype不允许的类型
在源文件中声明了几种禁止的类型,如声明函数返回一个函数或数组
Outofmemory内存不够
所有工作内存耗尽,应把文件放到一台有较大内存的机器去执行或简化源程序。
Pointerrequiredonleftsideof一>—>操作符左边须是一指针
在—>的左边未出现指针。
Redeclarationof‘xxxxxxxx’“"xxxxxxxx”重定义
此标识已经定义过。
Sizeofstructureorarraynotknown结构体或数组大小不确定
有些表达式(如sizeof或存储说明)中出现一个未定义的结构体或一个空长度数组
如果结构长度不需要,则在定义之前就可引用:
如果数组不申请存储空间或者初始化时给
定了长度,那么就可以定义为空长。
Statementmissing;语句缺少“;”
编译程序发现一表达式语句后面没有分号。
Structureofunionsyntaxerror结构体或共用(联合)语法错误
编译程序发现在struct或union关键字后面没有标识符或左花括号({)。
Structuresizetoolarge结构体太大
源文件中说明了一个结构体,它所需的内存区域太大以致内存不够。
Subscriptingmissing]下标缺少“]”
编译程序发现一个下标表达式缺少闭方括号。
可能是由于漏掉、多写操作符或括号
不匹配引起的。
Switchstatementmissing(语句缺少“(”
在switch语句中关键字switch后面缺少左括号。
Switchstatementmissing)语句缺少“)”
在switch语句中,测试表达式后面缺少右括号。
Toofewparametersincall函数调用参数太少
对带有原型的函数调用(通过一个函数指针)参数太少。
原型要求给出所有参数。
Toofewparameterincallto‘xxxxxxxx’调用“xxxxxxxx”时参数太少。
调用指定的函数(该函数用一原型声明)时.给出的参数太少。
Toomanycasescase太多
switch语句最多只能有257个case.
Toomanydecimalpoints十进制小数点太多
编译程序发现一个浮点常量中带有不止一个的十进制小数点。
Toomanydefaultcasesdefault情况太多
编译程序发现一个switch语句中有不止一个的default语句。
Toomanyexponents阶码太多
编译程序发现一个浮点常量中有不止一个的阶码。
Toomanyinitializers初始化太多
编译程序发现初始化比声明所允许的要多。
Toomanystorageclassesindeclaration声明中存储类太多
一个声明只允许有一种存储类。
Toomanytypesindeclaration声明中类型太多
一个声明只允许有一种下列基本类型:
char、int、float、double、struct、union、enum或typedef。
Toomuchautomemoryinfunction函数中自动存储太多
当前函数声明的自动存储超过了可用的内存空间。
Toomuchcodedefineinfile文件定义的代码太多
当前文件中函数的总长度超过64K字节。
可以移去不必要的代码或把源文件分开
来写。
Toomuchglobaldatadefineinfile文件中定义的全局数据太多
全局数据声明的总数超过64K字节。
检查一些数组的定义是否太长。
如果所有的
声明都是必要的,考虑重新组织程序。
Twoconsecutivedots两连续点
因为省略号包含三个点(...),而十进制小数点和选择运算符使用一个点(.)、所以在
C程序中出现两个连续点是不允许的。
Typemi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 错误