1

C++-Builde-6 コードの静的コード分析に cppcheck 1.64 の GUI バージョンを使用しています。DLL のエクスポートとインポートの場合、次の定義PACKAGEが必要です。

/// A dialog exported from a BPL (a VCL-specific kind of DLL)
class PACKAGE MySharedDialog {

public:
    // lots of methods to-be checked

private:
    // lots of methods to-be checked

    // lots of members

};

Cppcheck は、それPACKAGEが何を意味するのかわからないため、遭遇すると停止します。

コード「class PACKAGE TAppInfoDialog {」は処理されません。-I または --include を使用して、このコードの処理を追加できます。

...そしてもちろん、これはクラス全体がチェックされていないことを意味します。cppcheckに単にPACKAGE「キーワード」を無視させることができれば、まったく正しいことを行うことができますが、どのように行うのでしょうか? インクルードパスを介して元の定義を含めることはオプションではないようです.cppcheckは、変更できないVCLフレームワークのヘッダーについて多くのことを教えてくれます...

マニュアルにはそれを行うためのオプションが記載されていません.Googleは助けません.SOにはまだ答えがありません.

cppcheck イシュー トラッカーで、類似の問題#4707 (クラスの Microsoft 'abstract' および 'sealed' 拡張) – cppcheck を見つけました。ここで主任開発者は、ファイルを作成して (事前に?) cppcheck の実行に含めることを提案していますが、私は GUI バージョンを使用しており、単一のファイルを含めるオプションはありません。そこで、プロジェクト オプション (XML ファイル) のインクルード セクションにディレクターを追加しようとしました。次に、対応する行をファイル仕様に編集しましたが、このセクションにはインクルード パスが含まれているため、明らかに意味がありません。

次に何を試すことができますか?

4

1 に答える 1

1

PACKAGE解決策は、 (空であること)の定義をプロジェクト ファイルに追加することです。

<?xml version="1.0" encoding="UTF-8"?>
<project version="1">
    <defines>
        <define name="PACKAGE=" />
    </defines>    
</project>

この解決策は、master · danmar/cppcheck · GitHub のプロジェクト リポジトリ cppcheck/gui/projectfile.txt にある、小さいながらも価値のあるプロジェクト ファイルの説明で最終的に見つけました。

于 2014-03-04T11:24:57.717 に答える