Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2349090
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类: WINDOWS

2011-06-17 18:25:37

这是集中地处理程序中的一类错误的策略. 尤其是对于legacy 的code, pc-lint的默认输出信息量将会是的巨大的, 我碰过10万行C++代码, 产生200多MB的pc-lint警告信息的情况.

这一用法的关键是处理完这一类错误之后, 马上关掉 -e* 这个开关. 否则你会丧失pc-lint 对所有其它类型的潜在错误发出警告的好处.

-e*   选项是禁止所有警告. 这个选项本身会引起一个警告:
Warning 686: Option '-e*' is suspicious because of 'blanket suppression can hide configuration problems'
而且这个编号 686的警告本身是无法被禁用掉的. 这也说明pc-lint不建议在最终的配置文件中使用-e*

另一个类似的警告是 -wlib(0), pc-lint同样不建议将与库相关的警告级别调至0(意味着关闭所有警告), 它引发的错误信息是
Warning 686: Option '-wlib(0)' is suspicious because of 'blanket suppression can hide configuration problems'

但关于这个, 我个人却倾向于在配置文件中永久性地使用它, 原因是那是关于库代码的. 比如VC++的头文件, SDK的头文件, 第三方软件库的头文件. 这些地方即使引发警告, 你又能干什么呢?

各个击破, 并不就意味着只通过 +e577 之类的选项打开单单一个警告. 有可能是一族相关的警告. 比如printf/scanf 函数族中经常会出现的格式错误, 就有相关的警告如下:
+e557
+e558
+e559
+e560
+e561
+e566
+e567
+e592    // Non-literal format specifier used without arguments  -- A

// argument no. Integer inconsistent with format  -- The argument to
// a printf (or fprintf or sprintf) was inconsistent with the
// format.  Although the size of the quantity was appropriate the
// type was not.  You might consider casting the quantity to the
// correct type.  You could also suppress this message, as more
// flagrant violations are picked up with warning 559.
+e626

// (arg. no. Integer) indirect object inconsistent with format  --
// The type of an argument to scanf (or fscanf or sscanf) was
// inappropriate to the format.  However, the argument was a pointer
// and it pointed to a quantity of the expected size.
+e627


// Format char 'Char' not supported by wsprintf  -- This means that
// you are using an option of the form: -printf(w...  and you are
// using a format character not supported by the Microsoft Windows
// function wsprintf.  If you are not really using wsprintf but are
// using the w flag to get far pointers you should turn this message
// off.
+e642

// Argument no. Integer nominally inconsistent with format  -- The
// argument to a printf (or fprintf or sprintf) was nominally
// inconsistent with the format.  Although the size of the quantity
// was appropriate the type was similar, but not exact.  (E.g.,
// passing a long to a %d or an int to a %x)  You might consider
// casting the quantity to the correct type.  You could also
// suppress this message, as more flagrant violations are picked up
// with warnings 559 and 626.
+e705

// (arg. no. Integer) indirect object inconsistent with format  --
// The type of an argument to scanf (or fscanf or sscanf) was
// inappropriate to the format.  However, the argument was a pointer
// and it pointed to a quantity of the expected size and similar,
// but not expected type.
+e706


// Too many arguments for format (Integer too many)  -- The number
// of arguments to a function in the printf/scanf family was more
// than what is specified in the format.  This message is similar to
// Warning 558 which alerts users to situations in which there were
// too few arguments for the format.  It receives a lighter
// Informational classification because the additional arguments are
// simply ignored.
+e719

// Non-ANSI format specification  -- A non-standard format specifier
// was found in a format-processing function such as printf or
// scanf.  Such a specifier could be unique to a particular compiler
// or could be a de facto standard but is not ANSI.
+e816

+e905  // Non-literal format specifier used (with arguments)  -- A


阅读(7237) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~