【发布时间】:2014-07-11 17:56:51
【问题描述】:
我有以下代码行:
ftDCB.ByteSize = FT_BITS_8;
而 lint(特别是通过 Visual Lint 的 PC-lint)给了我一条消息 1924(“C-style cast -- More Effective C++ #2”)。
FT_BITS_8 是在第三方头文件中#定义的,演员表在哪里:
#define FT_BITS_8 (UCHAR) 8
而 UCHAR 是来自另一个第三方头文件的 typedef:
typedef unsigned char UCHAR;
它被分配给 (ftDCB.ByteSize) 的东西是一个 BYTE,它也是一个无符号字符的 typedef:
typedef unsigned char BYTE;
我真的不想修改第三方标头,所以我试图在我的代码中隐藏消息:
//lint -e(1924) C-style cast
ftDCB.ByteSize = FT_BITS_8;
但我收到了同样的 1924 消息。
我在这里做错了什么?有没有更简洁的方法来做我想要完成的事情(除了修改第三方标头)?
【问题讨论】:
-
reinterpret_cast呢? -
我不想修改第三方头文件,这是实际演员表的来源。
-
如果 lint 警告来自第三方标头,并且您不想修改该第三方标头,那么您只需要接受警告即可。
-
你确定这是真的吗,艾米特?我对来自其他第三方库的其他此类警告使用了我认为相同的策略。
-
那个宏定义甚至都不正确;它应该是
#define FT_BITS_8 ((UCHAR) 8)。评估sizeof FT_BITS_8应该产生1;对于现有定义,sizeof FT_BITS_8是语法错误。在大多数情况下,这无关紧要,但这是草率的编码。