我在这个lint错误抑制尝试中做错了什么?有没有更好的方法
What am I doing wrong in this lint error suppression attempt? And is there a better way?
我有以下一行代码:
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)
也将删除此问题的所有实例。
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 我的C++线程做错了什么?
- 谁能告诉我我用 getline 做错了什么 (cpp) 格式
- 没有输出的合并排序我做错了什么?
- 我正在尝试使用 while 循环从字符串中删除字母,直到没有字母。我在这里做错了什么?
- 在C++中使用 AKS 素数测试计算双胞胎素数 我做错了什么?
- 我一直试图弄清楚我在这个链表程序中做错了什么
- 我正在尝试学习如何在 c++ 中传递指针,但出现错误:没有用于调用"test"的匹配函数。我做错了什么?
- FFMPEG,C++,内存泄漏,我做错了什么?
- 我做错了什么?反向字符串 C++
- 我在这个课上做错了什么?
- 创建整数的 2D 数组,该数组将使用两个函数用随机数填充矩阵.我做错了什么?
- 在不使用内置库函数的情况下添加字符串,我做错了什么?
- 我做错了什么?GetDiskFreeSpaceExA的功能根本不起作用
- 我在查找和字符串上做错了什么?
- 我正在尝试用 c++ 制作一个日志记录框架,但信息没有传递给记录器的子组件,我做错了什么?
- 我在尝试将多个值push_back向量时出错。我做错了什么?
- 插入排序:我做错了什么?