2

これは、Clang の問題ではなく、C++ の問題のようです...

OCLint (静的コード アナライザー) ルールを作成するには、C++ を使用する必要があります。

タイプ「SourceLocation」を持つ Clang ライブラリの 2 つのオブジェクトを比較したいと考えています。

このタイプは、コード内のオブジェクト (ステートメント、宣言など) の位置 (基本的に行と列) に関する情報を提供します。

基本的に、ステートメントAがステートメントBの前または後に開始および終了するかどうかを知りたい.

擬似コードでは、次のブール値を取得したいことを意味します。

( stmt_A->getLocBegin() < stmt_B->getLocBegin() )、たとえば。もちろん、「<」演算子が「SourceLocation」型の 2 つのオブジェクト間で定義されていないため、これはコンパイルされません。

Clang のドキュメントでメソッドを見つけましたが、私は C++ を頻繁に使用するわけではないので、その使用方法がわかりません。このメソッドは次のとおりです。

http://clang.llvm.org/doxygen/classclang_1_1BeforeThanCompare_3_01SourceLocation_01_4.html

clang::BeforeThanCompare<SourceLocation>::BeforeThanCompare (SourceManager &SM)


bool clang::BeforeThanCompare< SourceLocation >::operator()(SourceLocation LHS, SourceLocation RHS)  const [inline]

SourceManager の使用方法、または上記のブール値を取得する方法がわかりません。

4

1 に答える 1

2

Clang ライブラリで SourceManager を使用する方法と、2 つの SourceLocation を比較する方法を示す最終的なコードを次に示します。

// Declaration of a SourceManager
SourceManager & loc_SM = _carrier->getSourceManager();

// Declaration of an object BeforeThanCompare<SourceLocation>
BeforeThanCompare<SourceLocation> isBefore(loc_SM); SourceLocation stmt_A, stmt_B;

// Get whether stmt_A is before or after Stmt_B 
bool A_before_B = isBefore(stmt_A,stmt_B);
于 2014-07-15T06:28:16.453 に答える