文栏 - 信息技术 - C语言相关 - 浏览文章 - Turbo C(V2.0)编译错误信息简解
Turbo C(V2.0)编译错误信息简解
发布时间: 2007/11/4 15:33:51 作者: 不详 出处: http://www.cnsharenet.net/

说明:Turbo C 的源程序错误分为三种类型:致命错误、一般错误和警告。其中,致命错误通常是内部编译出错;一般错误指程序的语法错误、磁盘或内存存取错误或命令行错误等;警告则只是指出一些得怀疑的情况,它并不防止编译的进行。



(一)、致命错误英汉对照及处理方法 Top

A-B致命错误

Bad call of in-line function (内部函数非法调用)
分析与处理:在使用一个宏定义的内部函数时,没能正确调用。一个内部函数以两个下划线(__)开始和结束。

Irreducable expression tree (不可约表达式树)
分析与处理:这种错误指的是文件行中的表达式太复杂,使得代码生成程序无法为它生成代码。这种表达式必须避免使用。

Register allocation failure (存储器分配失败)
分析与处理:这种错误指的是文件行中的表达式太复杂,代码生成程序无法为它生成代码。此时应简化这种繁杂的表达式或干脆避免使用它。


(二)、一般错误信息英汉对照及处理方法 Top

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

#operator not followed by maco argument name(#运算符后没跟宏变元名)
分析与处理:在宏定义中,#用于标识一宏变串。“#”号后必须跟一个宏变元名。

'xxxxxx' not anargument ('xxxxxx'不是函数参数)
分析与处理:在源程序中将该标识符定义为一个函数参数,但此标识符没有在函数中出现。

Ambiguous symbol 'xxxxxx' (二义性符号'xxxxxx')
分析与处理:两个或多个结构的某一域名相同,但具有的偏移、类型不同。在变量或表达式中引用该域而未带结构名时,会产生二义性,此时需修改某个域名或在引用时加上结构名。

Argument # missing name (参数#名丢失)
分析与处理:参数名已脱离用于定义函数的函数原型。如果函数以原型定义,该函数必须包含所有的参数名。

Argument list syntax error (参数表出现语法错误)
分析与处理:函数调用的参数间必须以逗号隔开,并以一个右括号结束。若源文件中含有一个其后不是逗号也不是右括号的参数,则出错。

Array bounds missing (数组的界限符"]"丢失)
分析与处理:在源文件中定义了一个数组,但此数组没有以下右方括号结束。

Array size too large (数组太大)
分析与处理:定义的数组太大,超过了可用内存空间。

Assembler statement too long (汇编语句太长)
分析与处理:内部汇编语句最长不能超过480字节。


Bad configuration file (配置文件不正确)
分析与处理:TURBOC.CFG配置文件中包含的不是合适命令行选择项的非注解文字。配置文件命令选择项必须以一个短横线开始。

Bad file name format in include directive(包含指令中文件名格式不正确)
分析与处理:包含文件名必须用引号("filename.h")或尖括号(<filename>)括起来,否则将产生本类错误。如果使用了宏,则产生的扩展文本也不正确,因为无引号没办法识别。

Bad ifdef directive syntax (ifdef指令语法错误)
分析与处理:#ifdef必须以单个标识符(只此一个)作为该指令的体。

Bad ifndef directive syntax (ifndef指令语法错误)
分析与处理:#ifndef 必须以单个标识符(只此一个)作为该指令的体。

Bad undef directive syntax (undef指令语法错误)
分析与处理:#undef指令必须以单个标识符(只此一个)作为该指令的体。

Bad file size syntax (位字段长语法错误)
分析与处理:一个位字段长必须是1—16位的常量表达式。


Call of non-functin (调用未定义函数)
分析与处理:正被调用的函数无定义,通常是由于不正确的函数声明或函数名拼错而造成。

Cannot modify a const object (不能修改一个长量对象)
分析与处理:对定义为常量的对象进行不合法操作(如常量赋值)引起本错误。

Case outside of switch (Case 出现在switch外)
分析与处理:编译程序发现Case语句出现在switch语句之外,这类故障通常是由于括号不匹配造成的。

Case statement missing (Case语句漏掉)
分析与处理:Case语必须包含一个以冒号结束的常量表达式,如果漏了冒号或在冒号前多了其它符号,则会出现此类错误。

Character constant too long (字符常量太长)
分析与处理:字符常量的长度通常只能是一个或两个字符长,超过此长度则会出现这种错误。

Compound statement missing (漏掉复合语句)
分析与处理:编译程序扫描到源文件未时,未发现结束符号 (大括号),此类故障通常是由于大括号不匹配所致。

Conflicting type modifiers (类型修饰符冲突)
分析与处理:对同一指针,只能指定一种变址修饰符(如near 或far);而对于同一函数,也只能给出一种语言修饰符(如Cdecl、pascal或interrupt)。

Constant expression required (需要常量表达式)
分析与处理:数组的大小必须是常量,本错误通常是由于#define常量的拼写错误引起。

Could not find file 'xxxxxx.xxx' (找不到'xxxxxx.xx'文件)
分析与处理:编译程序找不到命令行上给出的文件。


Declaration missing (漏掉了说明)
分析与处理:当源文件中包含了一个struct或 union域声明,而后面漏掉了分号,则会出现此类错误。

Declaration needs type or storage class(说明必须给出类型或存储类)
分析与处理:正确的变量说明必须指出变量类型,否则会出现此类错误。

Declaration syntax error (说明出现语法错误)
分析与处理:在源文件中,若某个说明丢失了某些符号或输入多余的符号,则会出现此类错误。

Default outside of switch (Default语句在switch语句外出现)
分析与处理:这类错误通常是由于括号不匹配引起的。

Define directive needs an identifier (Define指令必须有一个标识符)
分析与处理:#define 后面的第一个非空格符必须是一个标识符,若该位置出现其它字符,则会引起此类错误。

Division by zero (除数为零)
分析与处理:当源文件的常量表达式出现除数为零的情况,则会造成此类错误。

Do statement must have while (do语句中必须有While关键字)
分析与处理:若源文件中包含了一个无While关键字的 do语句,则出现本错误。

DO while statement missing ( (Do while语句中漏掉了符号 "(")
分析与处理:在do语句中,若 while关键字后无左括号,则出现本错误。

Do while statement missing;(Do while语句中掉了分号)
分析与处理:在DO语句的条件表达式中,若右括号后面无分号则出现此类错误。

Duplicate Case (Case情况不唯一)
分析与处理:Switch语句的每个case必须有一个唯一的常量表达式值。否则导致此类错误发生。


Enum syntax error (Enum语法错误)
分析与处理:若enum说明的标识符表格式不对,将会引起此类错误发生。

Enumeration constant syntax error (枚举常量语法错误)
分析与处理:若赋给enum类型变量的表达式值不为常量,则会导致此类错误发生。

Error Directive : xxxx (Error指令:xxxx)
分析与处理:源文件处理#error指令时,显示该指令指出的信息。

Error Writing output file (写输出文件错误)
分析与处理:这类错误通常是由于磁盘空间已满,无法进行写入操作而造成。

Expression syntax error (表达式语法错误)
分析与处理:本错误通常是由于出现两个连续的操作符,括号不匹配或缺少括号、前一语句漏掉了分号引起的。

Extra parameter in call (调用时出现多余参数)
分析与处理:本错误是由于调用函数时,其实际参数个数多于函数定义中的参数个数所致。

Extra parameter in call to xxxxxx(调用xxxxxxxx函数时出现了多余参数)


File name too long (文件名太长)
分析与处理:#include指令给出的文件名太长,致使编译程序无法处理,则会出现此类错误。通常DOS下的文件名长度不能超过 64个字符。

For statement missing ) (For语名缺少")")
分析与处理:在 for语句中,如果控制表达式后缺少右括号,则会出现此类错误。

For statement missing( (For语句缺少"(")

For statement missing; (For 语句缺少";")
分析与处理:在 for语句中,当某个表达式后缺少分号,则会出现此类错误。

Function call missing) (函数调用缺少")")
分析与处理:如果函数调用的参数表漏掉了右手括号或括号不匹配,则会出现此类错误。

Function definition out of place (函数定义位置错误)
分析与处理:函数定义不可出现在另一函数内。函数内的任何说明,只要以类似于带有一个参数表的函数开始,就被认为是一个函数定义。

Function doesn't take a variable number of argument(函数不接受可变的参数个数)
分析与处理:源文件中的某个函数内使用了 va_start 宏,此函数不能接受可变数量的参数。


Goto statement missing label (Goto语句缺少标号)
分析与处理:在 goto 关键字后面必须有一个标识符。


If statement missing( (If语句缺少"(")
分析与处理:在 if 语句中,编译程序发现 if 关键字后面缺少左括号。

If statement missing) (If语句缺少")")
分析与处理:在 if 语句中,编译程序发现测试表达式后面缺少右括号。

Illegal character ')'(0xxx)(非法字符'('(0xxx))
分析与处理:编译程序发现输入文件中有一些非法字符。以十六进制方式打印该字符。

lllegal initalization (非法初始化)
分析与处理:初始化必须是常量表达式或一全局变量 extern 或 static 的地址减一常量。

lllegal octal digit (非法八进制数)
分析与处理:此类错误通常是由于八进制常数中包含了非八进制数字所致。

lllegal pointer subtraction (非法指针相减)
分析与处理:这是由于试图以一个非指针变量减去一个指针变量而造成的。

lllegal structure operation (非法结构操作)
分析与处理:结构只能使用(.)、取地址(&)和赋值(=)操作符,或作为函数的参数传递。当编译程序发现结构使用了其他操作符时,出现此类错误。

lllegal use of floating point (浮点运算非法)
分析与处理:浮点运算操作数不允许出现在移位、按位逻辑操作、条件(?:),间接引用(*)以及其他一些操作符中。编译程序发现上述操作中使用了浮点操作数时,出现此类错误。

lllegal use of pointer (指针使用非法)
分析与处理:指针只能在加、减、赋值、比较、间接引用(*)或箭头(->)操作中使用。如用其他操作符,则出现此类错误。

Improper use of a typedef symbol (typedef符号使用不当)
分析与处理:源文件中使用了 typedef 符号,变量应在一个表达式中出现。检查一下此符号的说明和可能的拼写错误。

In-line assembly not allowed (内部汇编语句不允许)
分析与处理:源文件中含有直接插入的汇编文句,若在集成环境下进行编译,则出现此类错误。必须使用TCC命令行编译此文件。

Incompatible storage class (不相容的存储类型)
分析与处理:源文件的一个函数定义中使用了 extern 关键字,而只有 static (或根本没有存储类型)允许在函数说明中出现。extern 关键字只能在所有函数外说明。

Incompatible type conversion (不相容的类型转换)
分析与处理:源文件中试图把一种类型转换成另一种类型。但这两种类型是不相容的。如函数与非函数间转换、一种结构或数组与一种标准类型转、浮点数和指针间转换等。

Incorrect commadn line argument:xxxxxx (不正确的命令行参数:xxxxxxx)
分析与处理:编译程序认为此命令行参数是非法的。

Incorrect commadn file argument:xxxxxx (不正确的配置文件参数:xxxxxxx)
分析与处理:编译程序认为此命令行参数是非法的。检查一下前面的短横线(-)

Incorrect number format (不正确的数据格式)
分析与处理:编译程序发现在十六进制数中出现十进制小数点。

Incorrect use of default (deflult不正确使用)
分析与处理:编译程序发现 default 关键字后缺少冒号。

Initializer syntax error (初始化语法错误)
分析与处理:初始化过程缺少或多了操作符,括号不匹配或其他一些不正常情况。

Invaild indrection (无效的间接运算)
分析与处理:间接运算操作符(*)要求非 void 指针作为操作分量。

Invalid macro argument separator (无效的宏参数分隔符)
分析与处理:在定义中,参数必须用逗号相隔。编译程序发现在参数名后面有其他非法字符时,出现此类错误。

Invalid pointer addition (无效的指针相加)
分析与处理:源程序中试图把两个指针相加。

Invalid use of arrow (箭头使用错)
分析与处理:在箭头(->)操作符后必须跟一标识符。

Invalid use of dot (点(.)使用错)
分析与处理:在点(.)操作符后必须跟一标识符。


Lvalue required (赋值请求)
分析与处理:赋值操作符的左边必须是一个地址表达式,包括数值变量、指针变量、结构引用、间接指针和数组分量。


Macro argument syntax error (宏参数语法错误)
分析与处理:宏定义中的参数必须是一个标识符。编译程序发现所需的参数不是标识符的字符,则出现此类错误。

Macro expansion too long (宏扩展太长)
分析与处理:一个宏扩展不能多于4096个字符。当宏递归扩展自身时,常出现此类错误。宏不能对自身进行扩展。

May compile only one file when an output file name is given (给出一个输出文件名时,可能只编译一个文件)
分析与处理:在命令行编译中使用 -O 选择,只允许一个输出文件名。此时,只编译第一个文件,其他文件被忽略。

Mismatch number of parameters in definition(定义中参数个数不匹配)
分析与处理:定义中的参数和函数原型中提供的信息不匹配。

Misplaced break (break位置错误)
分析与处理:编辑程序发现 break 语句在 switch 语句或循环结构外。

Misplaced continue (Continue 位置错)
分析与处理:编译程序发现 continue 语句在循环结构外。

Misplaced decimal point (十进制小数点位置错)
分析与处理:编译程序发现浮点常数的指数部分有一个十进制小数点。

Misplaced else (else 位置错)
分析与处理:编译程序发现 else 语句缺少与之相匹配的 if 语句。此类错误的产生,除了由于 else 多余外,还有可能是由于有多余的分号、漏写了大括号或前面的 if 语句出现语法错误而引起。

Misplaced elif directive (elif指令位置错)
分析与处理:编译程序没有发现与#elif指令相匹配的#if、#ifdef或#ifndef指令。

Misplaced else driective (else指令位置错)
分析与处理:编译程序没有发现与#else指令相匹配的#if、#ifdef或#ifndef指令。

Misplaced endif directive (endif指令位置错)
分析与处理:编译程序没有发现与#endif指令相匹配的#if、#ifdef或#ifndef指令。

Must be addressable (必须是可编址的)
分析与处理:取址操作符(&)作用于一个不可编址的对象,如寄存器变量。

Must take address of memory location (必须是内存一地址)
分析与处理:源文件中某一表达式使用了不可编地址操作符(&),如对寄存器变量。


No file name ending (无文件终止符)
分析与处理:在#include语句中,文件名缺少正确的闭引号(")或尖括号(>)。

No file names given (未给出文件名)
分析与处理:Turbo命令行编译(TCC)中没有任何文件。编译必须有一文件。

Non-protable pointer assignment (对不可移植的指针赋值)
分析与处理:源程序中将一个指针赋给一个非指针,或相反。但作为特例,允许把常量零值赋给一个指针。如果比较恰当,可以强行抑制本错误信息。

Non-protable pointer comparison (不可移植的指针比较)
分析与处理:源程序中将一个指针和一个非指针(常量除外)进行比较。如果比较恰当,应强行抑制本错误信息。

Non-protable return type conversion (不可移植的返回类型转换)
分析与处理:在返回语句中的表达式类型与函数说明中的类型不同。但如果函数的返回表达式是一指针,则可以进行转换。此时,返回指针的函数可能送回一个常量零,而零被转换成一个适当的指针值。

Not an allowed type (不允许的类型)
分析与处理:在源文件中说明了几种禁止了的类型,如函数返回一个函数或数组。


Out of memory (内存不够)
分析与处理:所有工作内存用完,应把文件放到一台有较大内存的机器去执行或简化源程序。此类错误也往往出现在集成开发环境中运行的大的程序,这时可退出集成开发环境,再运行你自己的程序。


Pointer required on left side of (操作符左边须是一指针)


Redeclaration of 'xxxxxx' ('xxxxxx'重定义)
分析与处理:此标识符已经定义过。


Size of structure or array not known (结构或数组大小不定)
结构或数组大小不定。有些表达式(如 sizeof 或存储说明)中出现一个未定义的结构或一个空长度数组。如果结构长度不需要,在定义前就可引用;如果数组不申请存储空间或者初始化时给定了长度,那么就可定义为空长。

Statement missing;(语句缺少“;”)
分析与处理:编译程序发现一表达式语句后面没有分号。

Structure or union syntax error (结构或联合语法错误)
分析与处理:编译程序发现在 struct 或 union 关键字后面没有标识符或左花括号。

Structure size too large (结构太大)
分析与处理:源文件中说明了一个结构,它所需的内存区域太大以致存储空间不够。

Subscription missing ] (下标缺少‘]’)
分析与处理:编译程序发现一个下标表达式缺少右方括号。可能是由于漏掉或多写操作符或括号不匹配引起的。

Switch statement missing ( (switch 语句缺少"(")
分析与处理:在 switch 语句中,关键字 switch 后面缺少左括号。

Switch statement missing ) (switch 语句缺少")")
分析与处理:在 switch 语句中,变量表达式后面缺少右括号。


Too few parameters in call (函数调用参数不够)
分析与处理:对带有原形的函数调用(通过一个函数指针)参数不够。原型要求给出所有参数。

Too few parameter in call to'xxxxxx'(调用'xxxxxx'时参数太少)
分析与处理:调用指定的函数(该函数用——原型声明)时,给出的参数不够。

Too many cases (Cases太多)
分析与处理:swith语句最多只能有257个Case。

Too many decimal points (十进制小数点太多)
分析与处理:编译程序发现一个浮点常量中带有不止一个的十进制小数点。

Too many default cases (defaut太多)
分析与处理:编译程序发现一个 switch 语句中有不止一个的 default 语句。

Too many exponents (阶码太多)
分析与处理:编译程序发现一个浮点常量中有不止一个的阶码。

Too many initializers (初始化太多)
分析与处理:编译程序发现初始化比说明所允许的要多。

Too many storage classes in declaration (说明中存储类太多)
分析与处理:一个说明只允许有一种存储类。

Too many types in decleration (说明中类型太多)
分析与处理:一个说明只允许有一种下列基本类型:char,int,float,double,struct,union,enum或typedef名。

Too much auto memory in function (函数中自动存储太多)
分析与处理:当前函数声明的自动存储(局部变量)超过了可用的存储器空间。

Too much code define in file (文件定义的代码太多)
分析与处理:当前文件中函数的总长超过了64K字节。可以移去不必要的代码或把源文件分开来写。

Too much global define in file (文件中定义的全局数据太多)
分析与处理:全程数据声明的总数超过了64K字节。检查一下一些数组的定义是否太长。如果所有的说明都是必要的,考虑重新组织程序。

Two consecutive dots (两个连续点)
分析与处理:因为省略号包含三个点(...),而十进制小数点和选择操作符使用一个点(.),所以在C程序中出现两个连续点是不允许的。

Type mismatch in parameter # (参数"#"类型不匹配)
分析与处理:通过一个指令访问已由原型说明的参数时,给定第#参数(从左到右)不能转换为已说明的参数类型。

Type mismatch in parameter # in call to 'XXXXXXX' (调用'XXXXXXX'时,第#个参数类型不匹配)
分析与处理:源文件中通过一个原型说明了指定的函数,而给定的参数(从左到右)不能转换为已说明的参数类型。

Type missmatch in parameter 'XXXXXXX' (参数'XXXXXXX'类型不匹配)
分析与处理:源文件中由原型说明了一个函数指针调用的函数,而所指定的参数不能转换为已说明的参数类型。

Type mismatch in parameter 'YYYYYYYY' in call to 'YYYYYYYY'(调用'YYYYYYY'时参数'XXXXXXXX'数型不匹配)
分析与处理:源文件中由原型说明了一个指定的参数,而指定参数不能转换为另一个已说明的参数类型。

Type mismatch in redeclaration of 'XXX' (重定义类型不匹配)
分析与处理:源文件中把一个已经说明的变量重新说明为另一种类型。如果一个函数被调用,而后又被说明成返回非整型值也会产生此类错误。在这种情况下,必须在第一个调用函数前,给函数加上 extern 说明。


Unable to creat output file 'XXXXXXXX.XXX' (不能创建输出文件'XXXXXXXX.XXX')
分析与处理:当工作软盘已满或有写保护时产生此类错误。如果软盘已满,删除一些不必要的文件后重新编译;如果软盘有写保护,把源文件移到一个可写的软盘上并重新编译。

Unable to create turboc.lnk (不能创建turboc.lnk )
分析与处理:编译程序不能创建临时文件TURBOC.LNK,因为不能存取磁盘或者磁盘已满。

Unable to execute command 'xxxxxxxx'(不能执行'xxxxxxxx'命令)
分析与处理:找不到TLINK或MASM,或者磁盘出错。

Unable to open include file 'xxxxxxx.xxx' (不能打开包含文件'xxxxxxxx.xxx')
分析与处理:编译程序找不到该包含文件。可能是由于一个#include文件包含它本身而引起的,也可能是根目录下的CONFIG.SYS中没有设置能同时打开的文件个数(试加一句 file=20)。

Unable to open inputfile 'xxxxxxx.xxx' (不能打开输入文件'xxxxxxxx.xxx')
分析与处理:当编译程序找不到源文件时出现此类错误。检查文件名是否拼错或检查对应的软盘或目录中是否有此文件。

Undefined label 'xxxxxxx' (标号'xxxxxxx'未定义)
分析与处理:函数中 goto 语句后的标号没有定义。

Undefined structure 'xxxxxxxxx' (结构'xxxxxxxxxx'未定义)
分析与处理:源文件中使用了未经说明了的某个结构。可能是由于结构名拼写错或缺少结构说明而引起。

Undefined symbol 'xxxxxxx' (符号'xxxxxxxx'未定义)
分析与处理:标识符无定义,可能是由于说明或引用处有拼写错误,也可能是由于标识符说明错误引起。

Unexpected end of file in comment started on line #(源文件在某#个注释中意外结束)
分析与处理:通常是由于注释结束标志(*/)漏掉引起。

Unexpected end of file in conditional stated on line # (源文件在#行开始的条件语句中意外结束)
分析与处理:在编译程序遇到#endif前源程序结束,通常是由于#endif漏掉或拼写错误引起的。

Unknown preprocessor directive 'xxx' (不认识的预处理指令:'xxx')
分析与处理:编译程序在某行的开始遇到'#'字符,但其后的指令名不是下列之一:define,undef,line,if,ifdef,ifndef,include,else或endif。

Untermimated character constant (未终结的字符常量)
分析与处理:编译程序发现一个不匹配的省略符。

Unterminated string (未终结的串)
分析与处理:编译程序发现一个不匹配的引号。

Unterminated string or character constant(未终结的串或字符常量)
分析与处理:编译程序发现串或字符常量开始后没有终结。

User break (用户中断)
分析与处理:在集成环境里进行编译或连接时用户按了 Ctrl-Break 键。


Value required (赋值请求)


While statement missing ( (While语句漏掉 '(')
分析与处理:在 while 语句中,关键 while 后缺少左括号。

While statement missing ) (While语句漏掉 ')')
分析与处理:在 while 语句中,关键 while 后缺少右括号。

Wrong number of arguments in of 'xxxxxxxx' (调用'xxxxxxxx'时参数个数错误)
分析与处理:源文件中调用某个宏时,参数个数不对。


(三)、警告信息英汉对照及处理方法 Top

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

‘xxxxxxxx'declared but never used (说明了 'xxxxxxxx' 但未使用)
分析与处理:在源文件中说明了此变量,但没有使用。当编译程序遇到复合语句或函数的结束处时,发出此警告。

‘xxxxxxxx'is assigned a value which is never used ('xxxxxxxx'被赋值)
分析与处理: 没有使此变量出现在一个赋值语句中,但直到函数结束都未使用过。

‘xxxxxxxx'not part of structure ('xxxxxxxx'不是结构的一部分)
分析与处理:出现在点(.)或箭头(->)左边的域名不是结构的一部分,或者点的左边不是结构,箭头的左边不指向结构。

Ambiguous operators need parentheses (二义性操作符需要括号)
分析与处理:当两个位移、关系或按位操作符在一起使用而不加括号时,发出此警告;当一加法或减法操作符不加括号与一位移操作符出现在一起时,也发出此警告。程序员总是混淆这些操作符的优先,因为它们的优先级不太直观。


Both return and return of a value used (既用返回又用返回值)
分析与处理:编译程序发现同时有带值返回和不带值返回的 return 语句,发出此类警告。


Call to function with prototype (调用无原型函数)
分析与处理:如果“原型请求”警告可用,且又调用了一无原型的函数,就发出此类警告。

Call to function 'xxx' with prototype (调用无原型的‘xxxx' 函数)
分析与处理:如果“原型请求”警告可用,且又调用了一个原先没有原型的函数‘xxxx',就发出本警告。

Code has no effect (代码无效)
分析与处理:当编译程序遇到一个含无效操作符的语句时,发出此类警告。如语句:a+b,对每一变量都不起作为,无需操作,且可能引出一个错误。

Constant is long (常量是 long 类型)
分析与处理:当编译程序遇到一个十进制常量大于 32767,或一个八进制常量大于 65535 而其后没有字母‘I’或‘L’时,把此常量当作 long 类型处理。

Constant out of range in comparision (比较时常量超出了范围)
分析与处理:在源文件中有一比较,其中一个常量孖表达式超出了另一个孖表达式类型所允许的范围。如一个无符号常量跟 -1 比较就没有意义。为得到一大于 32767(十进制)的无符号常量,可以在常量前加上 unsigned(如 (unsigned)65535)或在常量后加上字母‘u’或‘U’(如 65535u)。

Conversion may lose significant digits (转换可能丢失高位数字)
分析与处理:在赋值操作或其他情况下,源程序要求把 long 或 unsigned 类型转变成 int 或 unsigned int 类型。在有些机器上,因为 int 型和 long 型变量具有相同长度,这种转换可能改变程序的输出特性。
无论此警告何时发生,编译程序仍将产生代码来做比较。如果代码比较总是给出同样结果,比如一个字符表达式与 4000 比较,则代码总要进行测试。这还表示一个无符号表达式可以与 -1 作比较,因为 8087 机器上,一个无符号表达式与 -1 有相同的位模式。


Function should return a value (函数应该返回一个值)
分析与处理:源文件中说明的当前函数的返回类型既非 int 型也非 void 型,但编译程序未发现返回值。返回 int 型的函数可以不说明,因为在老版本的C语言中,没有 void 类型来指出函数不返回值。


Mixing pointers to signed and unsigned char (混淆 signed 和 unsigned 字符指针。没有通过显式的强制类型转换,就把一个字符指针变为无符号指针,或相反。


No declaration for function 'xxxxxxxx' (函数‘xxxxxxxx'没有说明)
分析与处理:当“说明请求”警告可用,而又调用一个没有预先说明的函数时,发出此警告。函数说明可以是传统的,也可以是现代的风格。


Non-portable pointer comparision (不可移植指针比较)
分析与处理:源文件中把一个指针和另一非指针(非常量零)作比较。如果合适,可以强行抑制本警告。

Non-portable return type conversion (不可移植返回类型转换)
分析与处理:return语句中的表达式类型和函数说明的类型不一致。作为特例,如果函数或返回表达式是一个指针,这是可以的,在此情况下返回指针的函数可能返回一个常量零,被转变成一个合适的指针值。

Parameter'xxxxxxxx'is never used (参数‘xxxxxxxx'没使用)
分析与处理:函数说明中的某参数在函数体里从未使用,这不一定是一个错误,通常是由于参数名拼写错误而引起。如果在函数体内,该标识符被重新定义为一个自动(局部)变量,也将出现此类警告。


Possible use of 'xxxxxxxx' before definition (在定义‘xxxxxxxx'之前可能已使用)
分析与处理:源文件的某一表达式中使用了未经赋值的变量,编译程序对源文件进行简单扫描以确定此条件。如果该变量出现的物理位置在对它赋值之前,便会产生此警告,当然程序的实际流程可能在使用前已赋值。

Possible incorrect assignment (可能的不正确赋值)
分析与处理:当编译程序遇到赋值操作作为条件表达式(如 if,while 或 do-while 语句的一部分)的主操作符时,发出警告,通常是由于把赋值号当作符号使用了。如果希望禁止此警告,可把赋值语句用括号括起,并且把它与零作显示比较,如:if(a=b)...应写为:if((a=b)!=0)...


Redefinition of 'xxxxxxxx' is not identical (‘xxxxxxxx’重定义不相同)
分析与处理:源文件中对命令宏重定义时,使用的正文内容与第一次定义时不同,新内容将代替旧内容。

Resarting compiler using assembly (用汇编重新启动编译)
分析与处理:编译程序遇到一个未使用命令行选择项-B或#prapma inline语句的 asm。通过使用汇编重新启动编译。


Structure passed by value (结构按值传送)
分析与处理:如果设置了“结构按值传送”警告开关,则在结构作为参数按值传送时产生此警告。通常是在编制程序时,把结构作为参数传递,而又漏掉了地址操作符(&)。因为结构可以按值传送,因此这种遗漏是可接受的。本警告只起一个指示作用。

Suplerfluous & with function or array (在函数或数组成部分中有多余的‘&’号)
分析与处理:取址操作符(&)对一个数组或函数名是不必要的,应该去掉。

Suspicious pointer conversion (值得怀疑的指针转换)
分析与处理:编译程序遇到一些指针转换,这些转换引起指针指向不同的类型。如果合适,应强行抑制此类警告。


Undefined structure 'xxxxxxxx' (结构‘xxxxxxxx'未定义)
分析与处理:在源文件中使用了该结构,但未定义。可能是由于结构名拼写错误或忘定义而引起的。

Unknown assembler instruction (不认识的汇编指令)
分析与处理:编译程序发现在插入的汇编语句中有一个不允许的操作码。检查此操作的拼写,并查看一下操作码表看该指令能否被接受。

Unreachable code (不可达代码)
分析与处理:break,continue,goto 或 return 语句后没有跟标号或循环函数的结束符。编译程序使用一个常量测试条件来检查 while,do 和 for 循环,并试图知道循环有没有失败。


Void function may not return a value (Void 函数不可以返回值)
分析与处理:源文件中的当前函数说明为 void,但编译程序发现一个带值勤的返回语句,该返回语句的值被忽略。


Zero length structure (结构长度为零)
分析与处理:在源文件中定义了一个总长度为零的结构,对此结构的任何使用都是错误的。

所属分类: 信息技术 - C语言相关   所属专题: 他山之石
共有 7833 人次浏览

评论作者:
电子邮件:
评论内容:
投票评价:
验 证 码:
图片包含4个随机字符,点击刷新
请输入上面图片中的随机字符