我有以下代码行:
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年消息。
我在这里做错了什么?是否有更简洁的方法来完成我想要完成的任务(除了修改第三方标题)?
答案 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)
也会删除此问题的所有实例。