Что я делаю не так в этой попытке подавления ошибок? И есть ли лучший способ?

У меня есть следующая строка кода:

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 из заголовочного файла другого стороннего производителя:

typedef unsigned char UCHAR;

Назначение (ftDCB.ByteSize) — это BYTE, который также является typedef для неподписанного символа:

typedef unsigned char       BYTE;

Я действительно не хочу изменять сторонние заголовки, поэтому я попытался скрыть сообщение в моем коде:

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

Но я получаю то же сообщение 1924 года.

Что я здесь не так делаю? И есть ли более чистый способ сделать то, что я хочу сделать (кроме изменения стороннего заголовка)?

2

Решение

Хорошо, отвечая на мой собственный вопрос, похоже, работает следующее:

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

Другие решения

У меня просто была такая же проблема, и я нашел более хороший способ исправить это (помните, что читаемость кода является основным аспектом качества кода, и если он напичкан комментариями ворсинок, это довольно уродливо).

Поэтому, если вам предоставляется заголовок, который вы не можете изменить (например, определения периферийных устройств в микроконтроллерах), вы должны включить их таким образом, чтобы 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

Это заблокирует сообщение 1924 от всех макросов, определенных в peripheral.h и включает в себя оттуда.

-save а также -restore вероятно, излишни, но это моя привычка, так как я часто сталкиваюсь с неприятностями, когда отключаюсь слишком много в одной точке и больше не получаю никаких сообщений.

Обратите внимание, что все заголовки включены в peripheral.h теперь будут рассматриваться как заголовки библиотек, но вы обычно этого хотите.

Вы можете прочитать главу 6 руководства по PC-lint, касающуюся библиотек.

3

Поскольку FT_BITS_8 является макросом, -esym(1924,FT_BITS_8) в вашем файле std.lnt также будут удалены все случаи этой проблемы.

0
По вопросам рекламы [email protected]