77范文网 - 专业文章范例文档资料分享平台

PClint错误码大全(8)

来源:网络收集 时间:2019-01-10 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

//lint -sp8 pointers are 8 bytes //lint -si4 integers are 4 bytes char *f( char *p, int n, int m )

{

return p + (n + m); // warning 679 }

按照 C/C++的规则,加运算 n+m 被独立地在它的上下文中执行,并且按照整型精度。任何溢出被忽略,甚至指针的大些的精度能很容易地提供溢出。如果,在另一方面表达式是:p+n+m,分析为 (p+n)+m, 没有告警被发布。如果表达式是 p+n*m ,那么要抑制告警,需要一个转换。如果 long 和指针的大小相同,你应该使用表达式:

return p + ((long) n * m);

1.5.190 -680-在算术表达式转换为指针中可疑的切断

一个算术表达式被转换为指针。而且,指针的大小比表达式的大小大。在计算表达式里,任何溢出将被丢失甚至指针类型将被I提供丢失信息。要抑制信息,转换其中的一个操作数为一个足够容纳指针的整型类型。作为选择,如果你保证没有问题,你可以在转换为指针前转换表达式为一个整型类型。见信息 647, 776, 790 和 679。

1.5.191 -681- 循环没有输入

对一个循环的控制表达式(或者在一个while 子句中的表达式,或者是for 子句内的第二个表达式) 最初的计算是零,因此看起来好像循环没有输入。

1.5.192 -682- sizeof 用于类型是一个数组的参数'Symbol'

如果一个参数的类型是一个数组,它被提升为一个指针。取这个数组的大小将实际产生指针的大小。考虑,例如:

unsigned f( char a[100] ) { return sizeof(a); }

这里,它看起来似乎函数 f() 将返回值 100,但是它实际返回指针的大小,是4。

1.5.193 -683- 函数 'Symbol' #define'd

无论何时有一些语义相关的函数名被定义为一个宏,这个信息被发布。例如:

#define strlen mystrlen

问题是对strlen 定义的语义将被丢失。考虑这个信息,一个断言去转换语义从 strlen 到 mystrlen, 使用 -function(strlen, mystrlen), 这个信息将对内置函数发布(有内置语义) ,或对以后定义的语义。如果这个函数被定义为一个相似的名称,但是有下划线或者在前面,或者在后面,或者两边都有,则信息不会被发布。例如:

#define strlen __strlen

将不会产生这个信息。将会代替而产生信息 828。

1.5.194 -684- 传递auto 变量的地址 'Symbol' 到调用者空间

一个auto 变量的地址通过分配给一个通过调用者确定的函数位置被传递。例如: void f( int *a[] )

{ int n; a[1] = &n; }

这里一个auto 变量(n)的地址被传递给数组的第二个元素,传递到函数 f。这看起来可疑,因为在返回的数组之上将包含一个寿命结束的指向变量的指针。这可能是良性的,因为

可能是 f()的调用者仅仅传递一个工作空间给被丢弃的返回上。如果是这种情况,你可以对函数 f() 抑制这个信息,使用选项: -efunc(684,f)

参见告警 604。

1.5.195 -685- 关系操作符 'String,' 总是计算 'String'

第一个String 是以下之一:'>'、'>='、'<' 或 '<=' ,并标识关系操作符。第二个 string 是 'True' 或 'False' 之一。 当一个表达式和一个常量比较,并表达式的精度显示判断将总是成功或总是失败时,发布这个信息。例如:

char ch; ...

if( ch >= -128 ) ...

在这个例子中,char ch 的精度是 8 比特有符号的(假定 fcu 标志在关闭状态), 因此它的值的范围是从 -128 到 127 。因此这个判断总为真。注意,学术上,ch 在和常量比较前被提升为 int 。为这个比较的目的,我们仅考虑根本的精度。作为另一个例子,如果 u 是一个 unsigned int 那么

if( (u & 0xFF) > 0xFF ) ...

将发布信息 685 ,因为左手边的表达式有一个有效的16 比特的精度。

1.6 C 情报信息

1.6.1

-701-int类型(有符号)变量左移 -702-int类型(有符号)变量右移

移位应该在无符号数上操作

1.6.2

移位应该在无符号数上操作。一个有符号数右移依赖于系统

1.6.3 -703-long类型(有符号)变量左移

移位应该在无符号数上操作

1.6.4

-704-long类型(有符号)变量右移 -708-union类型变量初始化

移位应该在无符号数上操作.

1.6.5

试图初始化一个联合的值。这可能在一些旧的编译器上不允许。这是因为明显的不明确:成员应该被初始化。标准解释是应用初始化到联合的第一个图表类型。

1.6.6

-712-精确度损失

在两个整型量之间进行一个分配 (或隐含分配) ,第一个类型比第二个类型大。一个转换将抑制这个信息。 1.6.7 -713-精确度损失

从一个无符号量分配(或隐含分配)到一个有符号量,将导致可能丢失一个比特的整型精度,例如从unsigned int 到 int 的转换。一个强制转换将抑制这个信息。 1.6.8 -714-符号没有使用

外部变量或外部函数被定义,但是没有被引用。这个信息对单元检查被抑制。

1.6.9

-715-符号没有使用

形参没有被引用。

1.6.10 -716-发现while(1) ...

发现一个 while(1) ... 形式的结构。尽管这代表在期望一个布尔值的上下文的一个常量,它可能反映一个程序政策,为何无限循环在这个结构的前面。因此,这个信息被给出一个独立的号,并放置于情报的种类中。更方便的无限循环前缀的形式是 for(;;) 1.6.11 -717-发现do ... while(0) –

尽管这代表在期望一个布尔值的上下文的一个常量,这个结构可能是故意试图压缩一系列语句为一个单独的语句,因此给出一个单独的错误信息。例如:

#define f(k) do {n=k; m=n+1;} while(0)

允许 f(k) 被用于一个条件语句中:

if(n>0) f(3); else f(2);

从而,如果你故意这样做,使用-e717。

1.6.12 -718-'Symbol'符号没有定义,假定返回int

一个函数被引用没有(或之前)被在当前的模块内声明或定义。这不是一个必要的错误,你可能希望抑制它(见章节14. 灵活使用LINT.). 注意:通过在另一个模块内增加声明,你将不能抑制这个信息。它只能被抑制通过在被处理的模块内放置一个声明。 1.6.13 -719 -过多的格式参数

在 printf/scanf 函数族中函数的参数个数比在格式中确定参数要多。这个信息和告警 558 相似,后者断言用户使用过少的格式参数。它接受一个轻微的信息分级,因为附加的参数被简单地忽略。

1.6.14

-720-布尔测试中有赋值

在一个分配中发现上下文需要一个布尔。(例如在一个 if() 或 while() 子句或一个操作数到 && 或 ||)。这可能是合法的,或者它由错误的对==使用=产生。 1.6.15 -721- 怀疑 ; 使用错误

在一个形式 if(e);的结构中,发现一个分号在右括号的右边。这可能是没有注意到或对使用分号结束语句困惑。如果分号被至少一个空格从')'分隔,这个信息将被抑制。最好,把它放置于一个单独的行。参见信息 548。

1.6.16

-722 -怀疑 ; 使用错误

在一个形式 while(e); 或 for(e;e;e);的结构中,发现一个分号在右括号的右边。这可能是没有注意到或对使用分号结束语句困惑。如果分号被至少一个空格从')'分隔,这个信息将被抑制。最好,把它放置于一个单独的行。 1.6.17 -723-怀疑=使用错误

一个预处理定义以一个 = 符号开始。例如:

#define LIMIT = 50

这是故意的吗?或者是程序员当他写这些的时候他想起分配。 1.6.18 -725-期望从当前位置积极缩排

从指示行发现当前行被积极缩排。后面的相应子句引入的控制结构和语句和其它控制子句和它的范围内的括号被期望有少点的缩排。如果你的程序中的tab的值不是8个空格,你可以使用-t 选项 (见章节11.3缩排检查)

1.6.19 -726-多了无关的逗号

在一个枚举中,一个逗号跟着一个右括号,这不是一个有效的ANSI结构。逗号被忽略。 1.6.20 -727-符号 'Symbol' (Location) 没有明确地初始化

static变量(函数的局部变量) 在使用前没有被明确地初始化。下面的评论适用于信息728、729、727。 “没有明确地初始化”我们的意思是:在目标的定义中没有初始化器存在,没有直接分配到目标、没有地址操作符用于目标,或如果取目标的地址,它分配一个指针到 const。这些信息不是必要的信号错误,因为对static 变量隐含地初始化是零。但是,信息对指出你忘记初始化一个值有帮助。要从信息中吸取最大益处,我们建议你对那些你希望初始化为零的变量使用明确地初始化。例如:

static int n = 0;

对那些需要动态初始化的变量,不要使用明确地初始化,例如:

static int m;

对任何数组、结构或联合,如果没有成员或元素被分配一个值,这个信息将被发布。 1.6.21 -728-符号 'Symbol' (Location) 没有明确地初始化

模块内的变量(文件范围的 static 变量) 没有被明确的初始化。见在信息 727 中更多的细节。

1.6.22 -729-符号 'Symbol' (Location) 没有明确地初始化

模块内的变量(外部变量) 没有被明确的初始化。见在信息 727 中更多的细节。这个信息对单元检查是被抑制的。 1.6.23 -730-函数的变量为布尔型

一个布尔被用于作为一个函数的参数。这是故意的吗?或是程序员被一个独特的复杂的条件语句迷惑了。有经验的C程序员经常抑制这个信息。这个信息仅仅针对如果相关的参数不被声明为bool。

1.6.24

-731-布尔型变量使用了== or !=

一个布尔被用于作为== 或 !=的参数。例如: if( (a > b) == (c > d) ) ...

判断是否不等式有同样的值。这可能是一个错误,因为是一个不寻常的使用一个布尔 (见告警 503 和 514) ,但它可能是故意的,因为这是唯一的方式去有效地获得等值。因为可能的使用,结构被给出为一个相关的轻微的情报分级。如果布尔参数被转换为其它类型,信息不会被给出。

1.6.25 -732-符号位丢失(Context) (Type to Type)

从一个有符号量分配(或隐含分配)到一个无符号量。而且,不能决定这个有符号量没有符号。例如:

u = n; /* Info 732 */ u = 4; /* OK */

这里 u 是一个无符号的,而 n 不是,只是对第一个分配授权这个信息,即使常量 4 是名义上地一个有符号的 int。确保这不是一个错误 (分配的值永远不是一个负值) ,然后使用一个转换(到无符号)来去除这个信息。 1.6.26 -733-把自动变量的地址赋值给外部变量

一个 auto 变量的地址仅仅在变量被声明的块内是有效的。这个变量的地址被分配给一

个更长生命期望的变量。做这种事情有内在的危险。

1.6.27

-734-精确度的丢失(Context) (整型之间)

-- An assignment

is being made into an object smaller than an int. The information being assigned is derived from another object or combination of objects in such a way that information could potentially

be lost. The number of bits given does not count the sign bit. 例如 if ch is a char and n is an int then:

ch = n;

will trigger this message whereas:

ch = n & 1;

will not. To suppress the message a cast can be made as in:

ch = (char) n;

You may receive notices involving multiplication and shift operators with subinteger variables. 例如:

ch = ch << 2 ch = ch * ch

where, 例如, ch is an unsigned char. These can be suppressed by using the flag +fpm (precision of an operator is bound by the maximum of its operands). See 章节 5.5 Flag 选项.

1.6.28

-735-精度丢失(Context) (Integer bits to Integer bits)

-- An assignment

(or implied assignment, see Context) is made from a long double to a double. Using a cast will suppress the message. The number of bits includes the sign bit.

1.6.29

-736-精度丢失(Context) (Integer bits to Integer bits)

-- An assignment

(or implied assignment, see Context) is being made to a float from a value or combination of values that appear to have higher precision than a float. You may suppress this message by using a cast. The number of bits includes the sign bit. 1.6.30 -737-符号位的丢失

-- An unsigned quantity was joined with

a signed quantity in a binary operator (or 2nd and 3rd arguments to the conditional operator ? :)

and the signed quantity is implicitly converted to unsigned. The message will not be given if the

signed quantity is an unsigned constant, a Boolean, or an expression involving bit manipulation. 例如,

u & ~0xFF

where u is unsigned does not draw the message even though the operand on the right is technically

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库PClint错误码大全(8)在线全文阅读。

PClint错误码大全(8).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/417473.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: