如何使用libclang检索函数调用参数值

2024-10-01 09:40:33 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以检索a的参数值克朗·辛迪克斯·卡索金。调用“表达式”光标?在

当我使用编译器转储AST时(clang++-AST dump来源.cpp)我得到关于函数调用(调用表达式)及其参数的信息。但是我不能使用python的绑定来复制它(其中AST是使用libclang的解析器检索的)。在

以下是我使用的源代码:

#include <iostream>
#include <GL/glut.h>
#include <EGL/egl.h>

#define MULTILINE(...) #__VA_ARGS__

void renderFunction()
{
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 0.0, 1.0);
    glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
    glBegin(GL_QUADS);
        glVertex2f(-0.5, -0.5);
        glVertex2f(-0.5, 0.5);
        glVertex2f(0.5, 0.5);
        glVertex2f(0.5, -0.5);
    glEnd();
    glFlush();
}

int main(int argc, char *argv[])
{          
    glutInit(&argc, argv);       
    glutInitDisplayMode(GLUT_SINGLE);
    glutInitWindowSize(500,500);
    glutInitWindowPosition(100,100);
    glutCreateWindow("OpenGL - First window demo");
    glutDisplayFunc(renderFunction);
    glutMainLoop();    

    return 0;
}

以下是其AST转储的一部分:

^{pr2}$

我想通过计算调用表达式游标来检索最后一行中的整型值部分。在


Tags: 编译器include表达式来源astdumpintclang
1条回答
网友
1楼 · 发布于 2024-10-01 09:40:33

您可以从标记列表中获取此信息,对于IntegerLiteral,第一个标记将是您的数字(不是真的那么整洁,但总比什么都没有好!)。在

cpp计划示例:

#define FOO 6

void foo(int x) {}

int main()
{
    foo(FOO);
    return 0;
}

示例python代码来解析它并只打印出IntegerLiteral值(使用lib clang):

^{pr2}$

输出:

TypeKind.INT 6
TypeKind.INT 0

相关问题 更多 >