我在这个lint错误抑制尝试中做错了什么?还有更好的方法吗?

时间:2014-05-22 15:30:20

标签: c++ lint pc-lint

我有以下代码行:

ftDCB.ByteSize = FT_BITS_8;

而lint(通过Visual Lint的PC-lint,特别是)给了我一条消息1924(“C-style cast - 更有效的C ++#2”)。

FT_BITS_8在第三方头文件中是#defined,并且演员阵容在哪里:

#define FT_BITS_8           (UCHAR) 8

UCHAR是来自另一个第三方头文件的typedef:

typedef unsigned char UCHAR;

它被分配给(ftDCB.ByteSize)的东西是BYTE,它也是unsigned char的typedef:

typedef unsigned char       BYTE;

我真的不想修改第三方标题,所以我试图在我的代码中禁止该消息:

//lint -e(1924) C-style cast
ftDCB.ByteSize = FT_BITS_8;

但我得到了同样的1924年消息。

我在这里做错了什么?是否有更简洁的方法来完成我想要完成的任务(除了修改第三方标题)?

3 个答案:

答案 0 :(得分:4)

好的,回答我自己的问题,以下似乎有效:

ftDCB.ByteSize = /*lint -e(1924) C-style cast */ FT_BITS_8;

答案 1 :(得分:3)

我遇到了同样的问题,我找到了一种更好的解决方法(记住代码可读性是代码质量的一个主要方面,如果它充满了lint注释,那就非常难看了。)

因此,如果您提供了无法更改的标头(如微控制器中的外设定义),则应以某种方式包含它们,以便PC-lint知道它是库标头。有几种方法,最简单的可能是使用尖括号。

所以而不是:

#include "peripheral.h"

使用:

#include <peripheral.h>

这将告诉PC-lint将文件视为库头,这使您可以使用-elib和兄弟来更好地控制消息。

如果您的邮件基于宏,-elibmacro提供了很好的可能性:

//lint -save
//lint -elibmacro(1924)
#include <peripheral.h>
//lint +elibmacro(1924)
//lint -restore

这将阻止来自peripheral.h中定义的所有宏的消息1924,并从那里包含。

-save-restore可能是多余的,但这是我的一种习惯,因为我经常遇到麻烦,一度禁用很多而且不再收到任何消息。

请注意,peripheral.h中包含的所有标头现在都将被视为库标头,但您通常需要这样。

您可能需要阅读有关库的PC-lint手册第6章。

答案 2 :(得分:0)

由于FT_​​BITS_8是一个宏,std.lnt文件中的-esym(1924,FT_BITS_8)也会删除此问题的所有实例。