PClint错误码大全.docx
- 文档编号:15040667
- 上传时间:2023-06-29
- 格式:DOCX
- 页数:175
- 大小:143.57KB
PClint错误码大全.docx
《PClint错误码大全.docx》由会员分享,可在线阅读,更多相关《PClint错误码大全.docx(175页珍藏版)》请在冰点文库上搜索。
PClint错误码大全
1.1.1.1.1PC-LINT中的各种错误信息都有一个相关的错误号,其中各个错误号的分配区间如下:
表1:
PC-LINT错误号区间分配
错误类型
错误号-C
错误号-C++
告警级别
语法错误
1-199
1001-1199
1
内部错误
200-299
0
致命错误
300-399
0
告警
400-699
1400-1699
2
提示信息
700-899
1700-1899
3
可选的注解
900-999
1900-1999
注:
其中200-299号告警为PC-LINT的内部错误,一般不会发生,
1.2C语法错误
1.2.1-1―未关闭注释(位置)
文件结束的时候,仍然有一个未关闭的注释存在,打开的这个注释位置将被显示出来。
1.2.2―2―未关闭的引号
在行尾的时候,仍然存在一个同行的未关闭的引号(单引号或双引号)。
1.2.3-3-#else没有一个#if
在一个区域内有一个#else,但是没有一个#if,#ifdef或#ifndef。
1.2.4-4-太多的#if嵌套层次
检测出一个内部的限制,有关#if的嵌套层次(包括#ifdef和#ifndef)。
1.2.5-5-太多的#endif
出现一个#endif,但不是#if或#ifdef或#ifndef.的。
1.2.6-6-堆栈溢出
一个内置的不可展开的堆栈被过分扩展。
可能是太多的嵌套的#if语句、#includes语句(包括所有的递归的#include语句),static块(有限制的括号)或#define置换。
1.2.7-7-不能打开include的文件:
FileName
FileName是不能打开的include文件的名字。
,可以见flagfdi(见章节5.5标志选项),选项-i...(见章节5.7其它选项)和章节13.2.1INCLUDE环境变量。
1.2.8-8-未关闭的#if(位置)
一个#if(或#ifdef或#ifndef)没有遇到相应的#endif。
位置是#if.的位置
1.2.9-9-太多的#else在#if(位置)
一个给定的#if包含一个#else,然后轮流流被紧跟另一个#else或一个#elif。
错误消息给出#if语句条件包含异常的行号
1.2.10-10-期望的字符串
字符串是期望的记号,期望的记号不能被发现。
当一定的保留字没有被认出时,给出这条消息,例如:
int__interruptf();
将收到一个Expecting';'messageatthef,因为它认为你想声明__interrupt。
改正的方法是建立一个新的保留字使用+rw(__interrupt)。
同样,保证使用正确的编译器选项文件。
见章节15.10奇怪的编译器.
1.2.11-11-超出大小范围
在#includel行确定的文件名的长度超过了FILENAME_MAX字符。
1.2.12-12-需要 -在一个#includeI被检测出来后和宏置换被执行后,期望一个文件的规范格式 1.2.13-13-不好的类型 类型形容词例如long、unsigned等等。 不能应用到紧跟的类型。 1.2.14-14-符号'Symbol'以前定义过(位置) 符号被定义第二次。 提供出以前定义的位置,如果这是一个暂定的定义(没有初始化),这个消息可以用+fmdflag抑制。 (章节5.5Flag选项). 1.2.15-15-符号'Symbol'重新被声明(TypeDiff)(位置) 符号被以前声明过或在其它模块定义过(其它位置)的类型和在当前位置的声明的类型不同。 参数TypeDiffr提供了类型怎么不同的进一步信息(见章节17.信息). 1.2.16-16-不认识的名字 一个#指示符后没有跟着一个可认识的单词。 如果这不是错误使用+ppw选项(章节5.7其它选项). 1.2.17-17-未被承认的名称 Anon-parameterisbeingdeclaredwhereonlyparametersshouldbe. 1.2.18-18-符号重新声明(TypeDiff)和此位置冲突 一个符号被重新声明。 参数TypeDiff提供类型不同的进一步信息(见Chapter17.信息)。 位置是先前定义的位置。 1.2.19-19-无效的声明 一个类型独自的出现而没有相关的变量,类型不是struct、union和enum.一个双分号能导致这个: intx;; 1.2.20-20-非法使用= 一个函数声明后紧跟一个符号. 1.2.21-21-期望{ 对于不确定大小的数组的初始化必须以一个左括号开始。 1.2.22-22-非法的操作符 发现一个一元操作符紧跟一个操作数,这个操作符不是一个post操作符。 1.2.23-23-期望“: ” -碰到一个? 操作符,o但是没有紧跟一个期望的: 操作符。 1.2.24-24-期望一个表达式,但是得到一个字符串 发现一个在一个表达式开始的操作符,但是它不是一个一元操作符。 1.2.25-25-非法的常量 在一个字符常量中遇到太多的字符。 1.2.26-26-期望一个表达式,但是得到一个字符串 1.2.27-27-非法的字符(0xff) 源代码中发现非法的字符。 消息中提供十六进制代码。 假定是一个空格。 如果你使用奇怪的字符在标识符名称中,你将得到这个信息。 你可以使用选项-ident(见章节5.7其它选项.) 1.2.28-28-重定义一个符号(符号位置) 给出的在以前(Location)声明的冒号前的标识符不是一个label. 1.2.29-30-期望一个常量 期望一个常量,但是没有得到。 可能是在case关键字后,数组维数、bitfield长度、枚举指、#if表达式等等. 1.2.30-31-重新定义一个符号(Symbol'conflictswithLocation) 数据对象或函数在此模块中以前定义过又被定义。 1.2.31-32-Field大小(member'Symbol')不能是0 给出的field的长度是非正(0或负数). 1.2.32-33-非法常量 当一个8进制的常量包含数字8或9时,这是一个错误的形式。 1.2.33-34-非常量初始化 -在一个static数据项中发现非常量初始化. 1.2.34-35-初始化有副作用 在一个static数据项中发现有副作用的初始化. 1.2.35-36-重新定义存储类的符号'Symbol'和位置Location冲突 对象的存储类被改变. 1.2.36-37-枚举值'Symbol'不一致(和位置Location冲突) 枚举值不一致. 1.2.37-38-符号'Symbol'的偏移量不一致(Location) 很多类或结构比早期的声明出现在不同的位置(从结构开始的偏移量).可能因为数组维数从一个模块到另一个模块的改变. 1.2.38-39-重新定义符号'Symbol'c和位置Location冲突 struct或union被重新定义. 1.2.39-40-没有声明标识符'Name' 在表达式内,一个标识符在以前没有被声明并且没有紧跟一个左括号.Name是标识符的名称. 1.2.40-41-重新定义符号'Symbol' 一个宏或函数的参数被重新定义. 1.2.41-42-期望一个语句 1.2.42-43-变量'Symbol'虚的类型 在一个实例的上下文中发现虚类型例如void类型. 1.2.43-44-需要一个switch 在一个switch外出现case或default语句. 1.2.44-45-错误的使用register 一个变量被声明为register,但是它的类型不应该是register(例如一个函数). 1.2.45-46-域类型应该是int 在结构中位域应该是类型为unsigned或int.如果你的编译器允许其它类型,例如char,那么抑制这条信息. 1.2.46-47-错误的类型 一元减需要一个算术操作数. 1.2.47-48-错误的类型 一元的*或左手边的指针(->)操作符需要一个指针操作数o. 1.2.48-49-期望一个类型 在原型内只有类型被允许。 原型是圆括号内有一系列的类型的函数声明.处理器是在它检测到至少圆括号内的一个类型时,期望更多的类型或关闭的右圆括号. 1.2.49-50-试图取非左值的地址 一元&操作符需要一个左值(对分配操作符左手边合适的值). 1.2.50-51-期望整型 一元~期望一个整型(signed或unsignedchar、short、int、或long). 1.2.51-52-期望一个左值 自动递减(--)和自动递增(++)操作符需要一个左值(对分配操作符左手边合适的值)。 记住括号不产生左值。 因此 ++(char*)p; 按照ANSI标准是非法的。 一些编译器允许这个结构,允许你使用+fpc选项(指针括号是左值).(见章节5.5Flag选项.) 1.2.52-53-期望一个标量 自动递减(--)和自动递增(++)操作符可能只应用于标量(算术和指针)或这些操作符定义的对象. 1.2.53-54-被0除 常量0w被用于除操作符(/)或取余操作符的右手边。 1.2.54-55-坏类型 上下文需要一个标量、函数或结构(除非-fsa). 1.2.55-56-坏类型 需要标量类型和指针的加/减操作符可能被加到指针中。 1.2.56-57-坏类型 Bit操作符(&,|和^)需要require整型参数. 1.2.57-58-坏类型 错误的参数给相关的操作符;这些通常需要两个标量和指针,不能和整数比较(除非常量0). 1.2.58-59-坏类型 移位的数量必须是整数. 1.2.59-60-坏类型 被移位的值必须是整数. 1.2.60-61-坏类型 上下文需要一个布尔值.布尔值必须是算术或指针形式. 1.2.61-62-对操作符': '矛盾的的类型(TypeDiff) ? : 的第二和第三个参数必须是一致的类型. 1.2.62-63-期望一个左值 分配操作符期望它的第一个操作数是一个左值.请注意acastremovesthelvaluednessofanexpression.参考flag+fpc在章节5.5Flag选项. 1.2.63-64-类型不匹配(Context)(TypeDiff) T在分配中有类型不匹配(或隐含分配,见Context)。 TypeDiff确定类型的区别.当分配一些种类的指针时用选项-epn,-eps,-epu,-epp(章节5.2错误禁止选项)来抑制这个消息. 1.2.64-65-期望一个成员名称 在一个(.)或(->)操作符后,一个成员名称应该出现. 1.2.65-66-坏类型 用一个不允许的void类型。 如果一个void类型放置在一个原型内,那么它必须只能是原型内的仅有类型。 (参考错误号49.) 1.2.66-67-不能从Type到Type计算 试图非标量到整数计算. 1.2.67-68-不能从Type到Type计算 试图非标量到浮点数计算. 1.2.68-69-不能从Type到Type计算 涉及结构到结构或其它对象间的不匹配的转换. 1.2.69-70-不能从Type到Type计算 试图计算一个指针到一个非寻常的类型(非整数)间的计算. 1.2.70-71-不能从Type到Type计算 试图计算一个不允许转换的类型. 1.2.71-72-错误的选项'String' 不能解释一个选项,选项在String中给出。 1.2.72-73-错误的左操作数 T指针位于或在->或.操作符的前面。 这些操作符期望一个表达式位于它们的左边。 请注意关闭任何在这个位置的复杂的表达式的圆括号。 1.2.73-74-Register的地址 试图应用地址操作符(&)到一个存储类是一个register的变量. 1.2.74-75-太晚改变大小(选项'String') 在所有的或部分的模块被处理后,给出大小选项。 确保在第一个模块被处理时或在任何模块被处理前的命令行上对目标的大小重新设置。 1.2.75-76-不能打开文件String String是文件的名称。 这个文件不能被打开而输出。 这个文件正在被处理为PC-lint/FlexeLint的目标模块。 1.2.76-77-位域的地址不能取 C语言的规则仅仅允许f取整个字节的地址。 1.2.77-78-typedef的符号'Symbol'在Location使用表达式 符号被定义在一个typedef语句,因此被认为是一个类型。 后来发现在上下文中期望一个表达式。 1.2.78-79-对%操作符错误的类型 %操作符应该和整型格式一起使用。 1.2.79-80-使用省略号不是严格的ANSI标准 省略号被用于原型,仅仅在一系列的原型后没有跟在一系列的标识符后。 一些编译器支持这个扩展。 如果你希望是用这个特性,抑制这个信息。 1.2.80-81-结构/联合不允许在等式比较中 两个struct或union被用于比较操作,如==或! =。 这在ANSI标准中是不允许的,如果你的编译器支持这个,抑制这个信息。 1.2.81-82-返回 ANSI标准不允许一个返回void函数的格式的表达式。 如果你试图转换void为return(void)f();,而且你的编译器允许,可以抑制这个信息。 1.2.82-83-在减操作中不兼容的指针类型 两个指针相减,指向的类型是不同的。 你将使PC-lint/FlexeLint去忽略指针中轻微的区别,通过使用一个或多个-ep...选项。 描述在章节5.2错误抑制选项. 1.2.83-84-sizeof目标是零或目标没有定义 一个sizeof返回一个0值。 如果目标没有定义或没有完整定义,这将会发生。 确保当你使用sizeof时,对目标是在范围内完整定义。 1.2.84-85-数组'Symbol'有0维 一个数组被声明在上下文中没有一个维数,需要一个非零的维数。 1.2.85-86-结构'Symbol'没有数据元素 尽管在C++中合法,但是在C中却是非法的。 1.2.86-87-对#ifdef或#ifndef表达式太复杂 在C的规则中,应该有一个单独的标识符紧跟#ifdef或#ifndef。 你可以提供一个有效的结构化的C(或C++)注释。 1.2.87-88-符号'Symbol'是一个有空元素的数组 一个数组被声明(在一个C模块中)为它的元素每个都是0长度,尽管在C++中是合法的名单在世C中是不允许的。 1.2.88-90-选项'String'仅仅合适在一个lint注释中 指示的选项不合适在一个命令行或一个.lnt文件中。 例如: 如果-unreachable被给出在命令行,你将得到这个信息。 1.2.89-91-行超过整型字符(使用+linebuf) 从输入文件中读取的一行比预期的要长。 默认的行缓冲的大小是600个字符。 每次你使用+linebuf选项,你将翻番这个大小。 1.2.90-92-负数数组维数或位域长度 一个负数的数组维数或数组长度是不被允许的。 1.2.91-93-在宏的字符串参数内新行是不被允许的 在一个宏调用中包含一个被切割为不只一行的字符串。 例如: A("Hello World"); 将触发这个信息。 如果一些编译器接受这种结构,你可以抑制这个信息。 但是最好把字符串常量放置于一行: A("HelloWorld"); 将更好。 1.2.92-101-期望一个标识符 当处理一个函数声明时,遇到一个参数说明,不是标识符,尽管以前的参数被确定为一个标识符。 这是混合旧格式声明和新格式声明的函数,这是不允许的。 例如: voidf(n,intm) 将发布这个信息。 1.2.93-102-非法的参数确定 在一个函数声明内,一个参数被确定为或者一个标识符,或者一个跟着声明的类型。 1.2.94-103-不期望的声明 在一个原型后,仅仅只能是一个逗号、分号、右括号或左brace。 如果你省略了一个在一个声明后的终结符,或如果你混合旧格式参数声明和新格式原型时,这个错误可能发生。 1.2.95-104-冲突的类型 发现两个连续的冲突类型,例如int紧跟一个double。 去除其中一个类型。 1.2.96-105-冲突的修饰符 发现两个连续的冲突修饰符,例如far紧跟一个near。 去除其中一个修饰符。 1.2.97-106-非法常量 在一个预处理器表达式中发现一个字符串常量,例如: #ifABC=="abc" 这个表达式应该是一个整型表达式。 1.2.98-107-标签'Symbol'(Location)没有定义 在一个goto中,Symbol在给给出的位置Location出现,但是没有相应的label。 1.2.99-108-无效的上下文 遇到一个continue或break语句,没有合适的上下文,例如: for,while,或do循环,多仅仅对break语句,相应的switch语句。 . 1.2.100-110-试图给一个void分配 试图分配一个值给一个指定的目标(可能通过一个指针)为void. 1.2.101-111-分配给一个const目标 一个目标被声明为const被分配给一个值。 例如,如果p是一个指针,指向一个constint,那么分配到*p将导致这个错误。 1.2.102-113-不一致的枚举声明 在一个枚举内的系列成员(或它们的值)和另一个同名的枚举量(通常在另一个模块)不一致。 1.2.103-114-对tag'Symbol'不一致的结构声明 在一个结构(或联合)内的系列成员(或它们的值)和另一个同名的枚举量(通常在另一个模块)不一致。 1.2.104-115-结构/联合没有定义 结构或联合的引用需要一个定义,但是在范围内没有定义。 例如,一个p->a的引用,这里p是一个指针,指向一个结构,但是此结构还没有在当前模块中被定义。 1.2.105-116-不合适的存储类 一个不同于register的存储类在一个代码段中被给出,专注于声明参数。 1.2.106-117-不合适的存储类 一个存储类在函数外被给出,表示auto或register。 这个存储类仅仅适合于函数内。 1.2.107-118-原型参数太少 一个函数提供的参数少于范围内原型指示的个数。 1.2.108-119-原型参数太多 一个函数提供的参数多于范围内原型指示的个数。 1.2.109-122-数字(字符)对基数太大 指示的字符在一个常量中被发现,并以零开始。 例如,08在一些编译器中被认为是8,但是它应该是010或8。 1.2.110-123-有参数在Location定义的宏'Symbol',这只是一个告警 有参数的宏被随后识别,没有一个其次的'('。 这是合法的,但是可能是个疏忽。 要抑制这个信息是难得的(使用-e123),因为一些编译器允许,例如,宏max()和变量max共存。 (见章节错误123使用min或max.). 1.2.111-124-指针指向void是不允许的 这包括减、加和关系操作符(>>=<<=). 1.2.112-125-太多的存储类确定符 发现多于一个的存储类确定符(static、extern,typedef,register或auto),只允许一个。 1.2.113-126-不一致的结构定义'Symbol' 模块间的结构(或union或enum)定义不一致。 当处理一个lob时,发现不一致。 行号信息在这个信息中不存在。 改变这个结构以便成员信息保持一致。 1.2.114-127-非法常量 一个空字符常量('')被发现。 1.2.115-128-指针指向函数不允许 指向函数的指针在一个算术上下文中被发现,例减、加或关系操作符(>>=<<=)。 1.2.116-129-期望声明,标识符'Symbol'被忽略 在一个上下文中期望一个声明,但是发现一个标识符,甚至,标识符不能跟着一个'('或一个'[' 1.2.117-130-期望一个整型类型 在一个switch语句中的表达式,必须是int的一些变种(可能是long或unsigned)或一个enum。 1.2.118-131-在位置Location调用宏'Symbol'时语法错误 当一个宏的参数(象函数的宏)被调用,而且提供的是不正确的参数个数,这时这个信息被发布。 Location是宏调用的开始的位置。 这个可能很有用,因为错误的宏调用能延续到很多行。 1.2.119-132-期望函数定义 在圆括号间的标识符的函数声明是一个旧形式函数定义的开始(K&R形式)。 这通常紧跟可选的声明和左大括号信号函数体的开始。 或者用类型代替标识符,或者用函数体完成函数。 1.2.120-133-对集合体太多的初始化器 在一个关闭括号的初始化器内,比集合体的元素有更多的项。 1.2.121-134-丢失初始化器 期望一个初始化器,但是仅仅存在一个逗号。 1.2.122-135-假定在初始化器中是逗号 在两个初始化器间丢失一个逗号,例如: inta[2][2]={{1,2}{3,4}}; 在第一个由大括号后丢失一个逗号。 1.2.123-136-非法的宏名称 ANSI标准限制使用特定名称的宏。 定义在限制列表中。 1.2.124-137-在switch内常量Symbol'被使用了两次 在一个switch语句内,指示的常量被作为一个case使用了两次。 目前只有记数类型被检查重复发生。 1.2.125-138-不能增加双亲'Symbol'到强类型String;创建循环 试图增加一个强类型双亲到一个typedef类型。 这个试图或者是明显的(使用选项-strong)或者是隐含的使用一个typedef到一个已知的强类型。 这个试图将导致在一个强双亲关系中的循环。 这个循环是简单地不可忍受的。 1.2.126-139-不能对函数进行sizeof计算 试图对函数进行sizeof计算。 1.2.127-140-类型出现在一个修饰符后 微软的修饰符,例如far、_near、__huge、_pascal等等修改声明符它直接的权限。 因此不应该出现在类型前。 例如,你应该写intpascalf(void);而不是pascalintf(void);。 注意: const、volatile和微软的修饰符不同。 它们可以出现在类型的前面或后面。 在报告错误后,试图处理
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PClint 错误 大全