問題タブ [pc-lint]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - プレーン char に対する PC-lint / Flexelint ルール
Gimpel Software の PC-lint と Flexelint には、"971: Use of 'char' without 'signed' or 'unsigned'"というルールがあり、signedness を指定せずにプレーンchar
タイプを使用することは禁止されています。
http://www.gimpel.com/html/pub/msg.txt
これは見当違いだと思います。を整数型として使用する場合char
は、署名を明示的に指定するのが理にかなっていますが、テキスト文字に使用する場合はそうではありません。などの標準ライブラリ関数はprintf
、 plain へのポインターを取得し、 orのchar
使用は型の不一致です。もちろん、型間でキャストすることはできますが、それはまさに lint が防ごうとしている種類の間違いにつながる可能性があります。signed
unsigned char
char
プレーンタイプに対するこの lint ルールは間違っていますか?
c - PC-Lint (by Gimpel) は、複数のモジュール間でどのように見えますか?
私は Gimpel の PC-Lint v8.00 を C コードベースで使用しており、それがモジュールをどのようにトラバースするかを理解しようとしています。PC-lint のマニュアルには、PC-Lint が「複数のモジュールを参照する」としか書かれていません。これはどのように行うのですか?たとえば、1 つのモジュールから開始し、関連するすべてのインクルード ファイルとソース ファイルを 1 つの大きなコードに結合して分析しますか? プログラムの流れを理解するために、どのくらい深く検索しますか?
関連する 2 番目の質問では、長いリストのすべての C モジュールを PC-Lint に提供するのではなく、一度に 1 つの C モジュールをコードベースから lint する方が有益なユース ケースがあります。ただし、C モジュールを 1 つだけ提供すると、依存する他の C モジュールが自動的に検出され、それらを使用して、指定された C モジュールのプログラム フローが理解されますか?
performance - 静的解析ツール PC-Lint を高速化するためのヒントはありますか? .LOB ファイルを使用した経験はありますか?
PC のリント時間に影響を与える主な要因を知りたいと思っています。-passes(#)
PC-Lint にかかる時間が増加する (直線的に増加する) ことや、出力されるメッセージを減らしてもリント時間に影響しないことなど、いくつかのことを認識しています。lint の経験が豊富な方に、lint 時間に影響を与える主な要因を挙げてもらい、lint のパフォーマンスに関する私の理解を確認したいと考えています。
また、PC-Lint で .lob ファイルを使用した経験のある方はいらっしゃいますか。リンティング時間にどの程度影響したと思いますか?
static-analysis - ヘッダーをライブラリ ヘッダーとして扱う PC-Lint
PC-Lint を使用して、ヘッダー ファイルをライブラリ ヘッダーとして処理し、その内部からのメッセージを抑制できるようにしようとしています。+libm(module.c)
v9.00 の PC-Lint マニュアルのセクション 6.1 で説明されているように、module.c をライブラリ モジュールとして扱い、それに含まれるすべてのヘッダー (つまり、module.h) をライブラリ ヘッダーとして扱うライブラリ モジュール オプションを使用しています。当然、module.h はライブラリ モジュールではない私のソース ファイルにも含まれています。
問題は、コードをリントすると、オプションを指定したにもかかわらず、module.h からメッセージが表示される+libm(module.c)
ことです。これは、module.h ファイルが他の非ライブラリ モジュールに含まれているためだと思われます。しかし、このような状況は典型的な使用例であるため、この+libm
オプションは役に立たなくなります。+libh(module.h)
またはを使用できることはわかっていますが、適切に機能し+libdir(...)
たいと考えています。+libm(module.c)
助言がありますか?
static-analysis - PC-lintをVisualC++2008と統合する方法
私の会社にはPC-lint実行可能ファイルlint-nt.exeがあります。
これを使用して、PC-lintをMS Visual Studio 2008と統合し、.c/ .cppソースを分析しようとしています。しかし、私はそれを機能させることに成功していません。
私は読む:
http://www.gimpel.com/html/pub80/env-vc9.lnt
他の1つまたは2つのサイトで同様の情報がありますが、成功しません。
示された手順に従ってVisualC++ 8に外部ツールを追加しましたが、新しく追加されたツールをクリックすると、pc-lintウィンドウが一時的に開き、すぐに閉じます。分析が実行されたとは思えません。だからそれは私のために働いていません。
次に、Windowsのコマンドプロンプトでlint-nt.exeを実行してみました。
lint-nt.exe +fce +fcp +cpp(cpp,cxx,cc) -i"C:\Program Files\Microsoft Visual Studio 9.0\VC\include" +libdir +libh myfile.cpp
分析は実行しましたが、ソースファイルに含まれていたため、Visual C ++ INCLUDEフォルダー(limits.h sal.h iostreamなど)から多くのヘッダーファイルを分析し#include <iostream>
ました。
編集:pc-lintにはオプション+/-libdir
や+/-libh
そのようなオプションがあり、役立つかもしれませんが、コンパイラヘッダーの分析を避けるためにそれらを正しく使用できませんでした。
2つの質問:
- pc-lintがコンパイラヘッダーファイルを分析せず、ソースコードファイルのみを分析するのを防ぐにはどうすればよいですか?
- 私が使用しているVisualC++ 2008 Expressエディションにpc-lintを統合するにはどうすればよいですか?
visual-studio - CMake と Visual Studio のファイル レベルでの PC-Lint の実行
CMake で生成された Visual Studio プロジェクトで、特定のファイルまたはプロジェクト全体に対して PC-Lint を実行する方法はありますか?
現在、 Kitware のスクリプトを使用してカスタム ターゲットを作成することで、プロジェクトごとに PC-Lint を実行できますが、私の環境では、プロジェクト全体のリントに最大 10 分かかる場合があります。そのため、特定のソース ファイルのみを lint する (そして Visual Studio からそのファイルを選択する) ことも可能にしたいと考えています。
PC lint をカスタムの「コンパイラ」として使用し、lint の「コンパイラ」を使用する別の project_LINT ターゲットをターゲット用に作成できるかどうかを考えていました。次に、個々のファイルを選択して「コンパイル」することができます。それとも、このアイデアは運命づけられていますか?:)
c++ - PC-Lintのすべてのメッセージを除外する
C++プロジェクトにPC-Lintを使用しています。デフォルトですべてのエラーメッセージと警告メッセージをオフにする方法はありますか?そうすれば、必要なメッセージを明示的に再導入できますか?
PC-Lintのマニュアルの「エラー抑制オプション」というタイトルの章を読みましたが、wLevelを-w0に設定するのが最善でした。メッセージなし(致命的なエラーを除く)
c++ - Lintがstd::stringクラスを認識できません
私は自分のプロジェクトをリントしようとしています。std::string
しかし、Lintは、、std::vector
などのクラスを認識できないようstd::queue
です。私lib-std.lnt
も設定ファイルを使用していますが、次のようなエラーに直面して、役に立たないです。
エラー40:宣言されていない識別子'キュー'
エラー40:宣言されていない識別子'文字列'
エラー10:構造体または結合が必要です
問題を解決する方法を知っている人はいますか?
サンプルコードの場合:-
===================================出力は次のとおりです
---モジュール:snip.cpp(C ++)
lint - PC-Lint に完全修飾関数名をメッセージに出力させる方法は?
PC-Lint を使用して、実行によって生成されたすべての警告を含む XML ファイルを生成しています。
このプロセスは、やや面倒な例外を除いて、ほぼ問題なく機能します。警告が見つかった完全修飾関数名を出力するメッセージ形式を取得できません。削除された関数名を出力するだけです。名前空間もクラス名もありません。
私が使用するフォーマット文字列は次のとおりです (この投稿の最後にドキュメントから関連するフォーマット情報を含めました)。
したがって、たとえば、次のようになります。
私が得るエラーはこれです(読みやすいように改行されています):
ご覧のとおり、関数名はfoo
、Bar::foo
私が望む/期待するものとは異なります。
誰かが尋ねる前に、文字列内の関数エスケープ記号について、私はと;-format
の両方を試しました。両方とも同じ必要最小限の関数名を生成しました。%i
%I
完全修飾名を取得するための魔法の形式のエスケープがあるかどうかは誰にもわかりませんか?
PC-Lint の-format
ドキュメントから:
%f = ファイル名
("Full File Names" を表すオプション +ffn を使用して、フル パス名を使用するかどうかを制御できることに注意してください)。
%l = 行番号
%t = メッセージ タイプ (エラー、警告など)
%n = メッセージ番号
%m = メッセージ テキスト
%c = 列番号
%C = 列番号 +1
%i =呼び出し関数
%% = パーセント記号%(...%) = ファイル内でエラーが発生した場合、
条件付きで ... で示される情報を含めます。 \n = 改行 \t = タブ \s = スペース \a = アラーム (ASCII 7 になります) \q = 引用符 ( "" ) \ = バックスラッシュ ( '\' )
c - すべての構造体メンバーの Lint Info 768 を無効にします
ここで質問するのが適切かどうかわかりませんが、とにかく質問します。
Lint に問題があります。現在、別のプロジェクトからいくつかのコードを移行しています。現在、新しいプロジェクトで使用されていない多くの構造体メンバーがあります。そしてもちろん、このリントは次のように不平を言っています。
情報 768: グローバル構造体メンバー 'foo' (89 行目、ファイル /path/header.h) が参照されていません
現時点ではこれらのメッセージを抑制したいと思います (ビルドが壊れるため) が、移行と並行してコードが実装されており、構造体メンバーが使用されないようにしたいため、グローバルには実行したくありません。そのため、グローバル構成ファイルを使用してこれらのメンバーのメッセージを抑制するオプションが残されています (つまり、-esym(768, foo))。
しかし、私はこの問題を抱えています:
foobar::foo と foobar::bar は現在使用されていないため、t_foobar 構造体全体に対して lint 例外を作成したいと考えていますが、-esym(foo) を使用すると、t_tempfoobar::foo に対しても例外を作成します。ほしくない。-esym(768, t_foobar*) を試しましたが、うまくいきませんでした。次のようなインライン例外も実行できません。
それは動作しません。これが機能する唯一の方法は、Lint の構成ファイルで -e768 を実行することです。
これを達成する方法について何か提案はありますか? メンバーごとに例外を書く必要はありませんか? これには、同じ名前の他の構造体のメンバーも除外されるという問題もあります。
助けてくれてありがとう