私はLibclangのpythonバインディングを使用しています。基本的に2つのクエリがあります:
ユーザーによって定義されておらず、ライブラリが含まれていないライブラリ関数を解析する方法を知りたい..たとえば、次のソースコードがある場合–
char* a=(char *)malloc(4);
- libclang は malloc( ) を解析できません。これは、stdlib がこのコードに含まれておらず、malloc に対してユーザー定義の定義が提供されていないためです。
コンストラクターを使用して定義されていないオブジェクトは、Libclang の AST によって認識されません。たとえば、ソースコードでは -
vector<int> color; color.push_back(1); color.push_back(2);
push_back( ) ステートメントは解析されませんが、次のように記述した場合:
vector<int> color=new vector<int>();
color.push_back(1);
color.push_back(2);
正しく解析されます。
この動作のもう 1 つの驚くべき兆候は、そのようなオブジェクトが関数パラメーターとしてユーザー定義関数に渡される場合です。例えば
bool check(int **grid, vector<char> color){ color.push_back('a'); }
push_back( ) はまだ識別されていませんが、これが記述されると、物事は正しく解析されます
bool check(int **grid, vector<char> color, int anc, int cur){
vector<char> color = new vector<int>()
color.push_back('a');
誰かが回避策を提案できれば素晴らしいでしょう。おそらく、設定時にこれを回避できるフラグがありますか?