if( n < 0 ) ...
为真,那么相似的:
u = 0; if( n < u ) ...
为假,因为提升到无符号使得 n 非常大。要解决这个问题,或者转换整型为 unsigned 如果你知道它永远不会小于零,或者转换 unsigned 到一个 int 如果你知道它永远不会超过 int 的最大值。
1.5.104
-575-枚举类型常量范围超过整型变量范围 -577-混合内存模式
对于很多编译器,一个枚举常量的值被限制到那些 signed 或 unsigned int 内的值。
1.5.105
指出的信息需要在部分所有其它模块被处理后改变内存模式。内存模式选项应该在模块处理前被确定。最通常导致这个错误是因为在确定标准库后确定内存模式。
1.5.106
-578-“Symbol”的声明隐藏了此符号其它地方声明
一个局部符号和一个全局符号(或可能另一个局部符号)有相同的名称。这可能很危险。这是故意的?最好重命名这个局部符号。
1.5.107
-579-函数参数省略号前面的参数为无效类型
当使用一个省略号时,省略号前的类型应该不是一个将默认提升的类型,例如char,short
或 float。 原因是很多编译器的变量参数方案(使用stdarg.h) 将中止。
1.5.108
-580-函数“Symbol”声明导致原型畸变
在一个块内函数的声明隐藏了一个在外部范围的声明,内部的声明没有原型,外部的声明有。一个通常的误解是作为结果的声明是两个声明的合成,这只是当声明是在同一范围,不是在嵌套的范围内。如果你不关心声明,你可以抑制这个信息。你将仍旧得到其它的类型区别告警。
1.5.109
-581-选项“String”过时了,不应该再使用 -582-esym (或者 emacro)不应该包含“(\
无论何时当我们遇到一个选项看起来要有害时发布这个信息。'String' 是有问题的选项。
1.5.110
。例如,要抑制信息 534 ,当调用 f(int) 使用选项-esym(534,f) , 甚至如果 f 被重载。
esym 中提供的名称应该不包含一个 ( 1.5.111
-601-对于给定的symbol没有给出其类型
一个声明没有明确的类型。假定为 int 。这是一个错误吗?这个很容易发生,如果一个逗号代替分号, 例如:
double radius, diameter;
程序员写为:
double radius; diameter;
这个信息将被发布。
1.5.112
-602-注释嵌套使用
这是故意的吗?或者是一个注释结束被不注意地删除了?如果你希望PC-lint/FlexeLint
识别注释嵌套,你应该使用选项+fnc设置注释嵌套标志。那么这个告警将不被发布。
1.5.113
-603- “symbol”未初始化
名称为’ symbol’的地址被传递给一个函数,相应的参数被声明为一个const指针。这应用于函数没有修改目标,如果是这种情况,那么最初的目标应该早些初始化。
1.5.114
-604-返回自动变量(临时变量)的地址
符号的地址被传回给一个函数。因为目标是一个 auto, 一个 auto 的持续时间不保证传递给 return, 这很可能是一个错误。你可能希望复制这个值到一个全局变量,传回全局的地址,或你可能考虑调用者传递一个它自己的一个变量的地址给被调用者。
1.5.115 -605- 增加指针的能力
这个告警针对分配一个指向 const的指针到一个普通指针。例如:
int *p; const int *q; p = q; /* 605 */
如果使用一个转换,将不会告警:
p = (int *) q;
增强能力表示因为 const 指针 q 能现在通过 p被修改。这个信息也可以适用于限定词 volatile ,和限定词 const 一样,可以被用于任何指针深度(指向指针、指向数组等等)。如果指针的水平超过一,事情变得轻易的糟糕。例如:
const char ** ppc; char ** pp;
pp = ppc; /* 605 - clearly not safe */ ppc = pp; /* 605 - looks safe but it's not */
C委员会直到最近才明白分配 pp 到 ppc 是危险的。问题是在上面的分配以后,一个 const char 的指针能被间接通过 ppc 分配,并通过 pp 访问,然后可以修改 const char。因为间指针有较少的能力。但是,分配指针没有破坏旧的一个,而两个指针的联合表现为纯粹的能力上的增加。当一个函数的原型包含一个比在其它原型中相应的指针有更高能力的指针时,也发布这个信息。这里有一个古怪的倒置,为何一个低些能力的原型转换为一个更强信任的函数,因此更强的能力 (一个特洛伊木马)。例如,让
void warrior( char * );
成为一个函数破坏它的参数,考虑函数:
void Troy( void (*horse)(const char *) );
Troy() 将调用 horse() 用一个参数,考虑信任 horse() 将有害的。在编译器更好知道之前,
相信加上一个 const 到目的地永远不会伤害任何事情,编译器早点允许 Greeks 传递 warrior() 到 Troy 和其余的,如他们所说,是历史。
1.5.116
-606-非ANSI转义系列: '\\String'
在一个字符或字符串内出现一个转义系列,不在经核准的列表中:
\\' \\\
\\octal-digits \\xhex-digits
1.5.117 -607- 在字符串内发现宏的参数 'Symbol'
在宏内的字符串内出现的名称和宏的形参的名称碰巧相同,如:
#define mac(n) printf( \
这是一致的吗?ANSI标准指出名称将不会被代替,但是因为很多C编译器替换这个名称,所以结构是可疑的。检查宏定义,如果你不希望替换,改变参数的名称。如果你希
望替换,设置 +fps 标志 (字符串内的参数),并抑制这个信息。
1.5.118
-608-赋值给数组类型的参数
分配给一个数组类型的参数。为分配的目的,参数被认为是一个指针。通常这个参数的类型是指针胜于数组。但是,如果这是你代码的形式,抑制这个信息。
1.5.119
-609-两个不同大小指针(far和near)间的转换 -610-可疑的指针合并操作
在两个不同大小的指针间分配 (一个是 far, 另一个是 near) ,是不兼容的。
1.5.120
比较、减或paired(在一个条件表达式中)不同大小的指针(一个是 far, 另一个是 near)。这是可疑的,因为正常的指针进行这样的操作是同样大小的。
1.5.121
-611-可疑的强制类型转换(按照ANSI标准)
函数指针和目标指针之间转换。这被ANSI标准认为是有问题的。如果这是一个用户错误,抑制这个告警。
1.5.122
-612-期望一个声明
一个声明包含仅一个存储类和一个类型。这差不多的确是一个错误,因为仅安排一个没有声明符的类型有意义是在一个struct, union 或 enum ,但是在这种情况下,你不能使用一个存储类。
1.5.123 -613-可能使用空指针(左值或右值)
上下文包括:一元的 *, 指针递增 (++) 或递减(--),加指针到数字、两个指针相减。在二元操作符中,'left' 或 'right'被用于指定哪个操作数是null。 Symbol 指示指针变量可能为NULL。参见信息413 和 794.
1.5.124
-614-自动集合类型变量的初始化非常量
一个自动集合的初始化器正常地由一系列的常量值表达式组成。一些编译器可能允许变量,如果是这种情况,你可疑抑制这个信息。
1.5.125
-615- 自动集合类型变量的初始化有副作用
这个告警和信息 614 相似。自动集合(数组、结构和联合)通过没有副作用的常量值表达式正常地初始化。如果编译器能支持副作用,你可疑抑制这个信息。
1.5.126
-616- Case/default语句少了Break
可能控制流从上面一个case语句或default 语句进入到下一个。这是有意的还是程序员忘记插入一个 break 语句?如果这是有意的,那么放置一个注释在标志的语句前,例如:
case 'a': a = 0; /* fall through */ case 'b': a++;
注意: 如果case 语句仅仅跟着case语句而没有干涉语句,信息将不被发布。
1.5.127
-617- String 是一个模块和一个包含文件
文件被用于作为一个包含文件和一个模块。这是一个错误吗?不象错误 306 (重复的模块),这仅是一个告警,试图处理这个文件。
1.5.128 -618-存储类型修饰符(static, extern, typedef, register 或 auto)在类型之后
存储类型修饰符(static, extern, typedef,register 或 auto) 被发现在一个类型确定之后。这是合法的,但是反对或者把存储类修饰符放置在类型之前,或抑制这个信息。
1.5.129 -619-在指针赋值时导致数据丢失(精度丢失)
一个 far 指针被分配给一个 near 指针,或者在一个分配语句中,或者是一个隐含分配,例如一个初始化器、一个返回语句、传递参数到一个存在的原型。 这种分配是一个时常发生的错误源,当实际的段不等于默认的数据段时。如果你能保证 far 指针的段等于默认的数据段,你应该使用一个转换来抑制这个信息。
1.5.130
-620-分不清是常量1还是字母l;所以建议使用L
一个常量结束为一个小写的字母 'l'。这是有意为1吗?这两个字母看起来非常象,要避免拼写错误,使用大小的字母'L'。
1.5.131 -621-标识符崩溃 (符号 'Name' 和符号 'Name' at String)
两个符号出现在同一个命名空间,但是在第一个count 字符内是相同的。通过选项-idlen(count,option)设置。见-idlen在章节5.7其它选项。
1.5.132
-622- scanf, fscanf or sscanf函数的参数与格式不一致
scanf , fscanf 或 sscanf 的参数是一个指针,它的大小和格式不匹配。例如: int far *p; scanf( \
将发布一个告警(在默认的内存模式l)。 1.5.133 -623- 重新定义存储类符号
在一个模块中一个内部模块符号是一个 typedef 符号,在另一个模块中是一个普通的符号。这是合法的,但是存在潜在的混淆。这是程序员有意的吗? 1.5.134 -624- typedef 被声明
一个符号在两个模块内被声明为不同的 typedef。 这在学术上是合法的,但是不是一个明智的程序实践。
1.5.135
-625 -自动变量使用了不该使用的类型修饰符
-626- printf (或fprintf 、sprintf)的参数与格式不一致
一些类型修饰符,如 far, near, fortran 对 auto 变量不合适。
1.5.136
printf的参数(或fprintf或sprintf)
和格式不一致。尽管大小一样,但是类型不一致。你可以
一致这个信息,当看到更多不能容忍的告警559的侵害。
1.5.137 -627-间接目标和格式不一致
scanf (或fscanf、sscanf)的参数的类型和格式不一致。但是,参数是个指针,指向的是期
望的大小。
1.5.138 -628- 没有参数信息提供给函数
函数被调用,但是没有提供参数信息。参数信息可疑来自原型或函数定义。当一个旧形式的函数声明指出函数在一个库中,但是没有为函数给出原型或在一个标准库文件中没有提供任何参数信息时,这种情况发生。如果你产生一个lob文件,因为大概在以后时间目标模块将和一个库文件进行比较,这个信息将被抑制。
1.5.139 -629- 对函数的static类是非标准的
在一个函数内发现一个 static 类函数声明。static 类仅仅被允许在文件范围内的函数声明(也就是说任何函数外 )。或者移动声明到函数外,或者改变 static 为 extern;如果选择第二个,确保在文件范围 extern 声明前也存在一个 static 声明。虽然在技术上结构
不是轻便的,很多编译器能忍受它。如果你抑制这个信息,PC-lint/FlexeLint 将把它作为一个正确的函数声明。
1.5.140 -630- 对符号不明确地引用
如果设置 +fab 标志,那么如果两个结构包含同样的成员名称 (不必要是不同种类的结构 ) ,被嵌入在同样的结构里,一个到这个成员的引用省略其中之一的干涉(消除模棱两可情况)名称,这个告警被发出。
1.5.141 -631- tag 'Symbol' 定义的不同
struct, union 或 enum tag被不同地定义在在不同的范围。这不是一个必要的错误,因为C
允许重定义,但是它是一个狡猾的错误的源头。这通常不是一个被推荐的程序实践。 1.5.142 -632- 分配给强类型
一个分配违背一个-strong(A... 选项请求的强类型检查。见章节 8. 强类型 1.5.143 -633- 从一个强类型分配
一个分配违背一个-strong(X... 选项请求的强类型检查。见章节 8. 强类型
1.5.144 -634- 在等式不条件式中强类型不匹配
一个等式操作 (== or !=) 或一个条件操作 (? :) 违背一个-strong(J... 选项请求的强类型检查。这个信息可疑使用标志 \Je\来抑制。见章节 8. 强类型
1.5.145 -635- 重新设置类型的双亲
给出的强类型双亲被重新设置。这通过一个 -parent 选项或一个 typedef 来完成。 注意这可能不是一个必要的错误,你可疑断言事实旧的链接被抹去。见章节 8. 强类型
1.5.146 -636- 强类型指针与其它类型相对
指针被比较,并且在第一个水平下有一个强类型冲突。例如:
/*lint -strong(J,INT) */ typedef int INT; INT *p; int *q;
if( p == q ) /* Warning 636 */
将发布这个告警。这个信息可以使用标志\Je\或 \Jr\或两个一起使用来抑制。
1.5.147 -637- 期望对强类型的索引类型
这个信息收到 -index 选项被认为不一致。下标不是规定的类型 (在信息中提到的第一个类型) ,或等于类型层次内的类型。见章节 8. 强类型和 +fhx。
1.5.148 -638- 在关系操作中强类型类型不匹配
一个关系操作违背一个-strong(J... 选项请求的强类型检查。这个信息可以通过使用标志 \Jr\来抑制。见章节 8. 强类型
1.5.149
-639-在二元操作中强类型类型不匹配
一个二元操作违背一个-strong(J... 选项请求的强类型检查。这个信息可以通过使用标志 \Jo\来抑制。见章节 8. 强类型
1.5.150 -640-在布尔表达式中期望强类型
一个布尔上下文期望一个通过选项-strong(B...确定的类型。见章节 8. 强类型