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

What am I doing wrong in this lint error suppression attempt? And is there a better way?

本文关键字:什么 错了 有没有 方法 更好 lint 错误      更新时间:2023-10-16

我有以下一行代码:

ftDCB.ByteSize = FT_BITS_8;

和lint (PC-lint通过Visual lint,特别是)给了我一个消息1924("C风格的转换-更有效的c++ #2")。

FT_BITS_8是在第三方头文件中定义的#,这就是强制转换的位置:

#define FT_BITS_8           (UCHAR) 8

UCHAR是来自另一个第三方头文件的类型定义:

typedef unsigned char UCHAR;

它被分配给的东西(ftDCB.ByteSize)是一个BYTE,这也是一个unsigned char的类型定义:

typedef unsigned char       BYTE;

我真的不想修改第三方标头,所以我试图在我的代码中抑制消息:

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

但是我收到了同样的1924年的信息。

我在这里做错了什么?是否有一种更干净的方法来完成我想要完成的事情(而不是修改第三方标头)?

好了,回答我自己的问题,下面的方法似乎行得通:

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

我刚刚遇到了同样的问题,我发现了一个更好的方法来解决这个问题(记住代码可读性是代码质量的一个主要方面,如果它被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章关于库。

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