3

次のコード行があります。

ftDCB.ByteSize = FT_BITS_8;

そして、lint (具体的には Visual Lint 経由の PC-lint) は、メッセージ 1924 を表示します (「C スタイルのキャスト -- より効果的な 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 メッセージが表示されます。

ここで何が間違っていますか?そして、私が達成したいことを行うためのよりクリーンな方法はありますか (サードパーティのヘッダーを変更する以外に)?

4

3 に答える 3

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

これにより、で定義されたすべてのマクロからのメッセージ 1924 がブロックされperipheral.h、そこからインクルードされます。

-saveとはおそらく不必要ですが、ある時点で多くを無効にしてメッセージを受信できなくなるというトラブルに頻繁に遭遇したため、これ-restoreは私の習慣です。

に含まれるすべてのヘッダーはperipheral.h現在、ライブラリ ヘッダーとして扱われますが、通常はそれが必要です。

ライブラリに関する PC-lint マニュアルの第 6 章を読むことをお勧めします。

于 2015-01-20T15:18:46.830 に答える
0

FT_BITS_8 はマクロであるため-esym(1924,FT_BITS_8)、std.lnt ファイルの もこの問題のすべてのインスタンスを削除します。

于 2014-07-09T01:39:23.193 に答える