使用 Clang AST 打印函数的参数

2024-04-06

我想将参数传递给函数。例如,如果我接到电话

printf("%d%d", i, j);

输出应该是

%d%d
i
j

我可以使用 RecursiveASTVisitor 中的 VisitCallExpr() 进行函数调用。还能够获取参数数量和参数类型。但我不知道如何获得论据。

bool MyRecursiveASTVisitor::VisitCallExpr (clang::CallExpr *E)  
{
    for(int i=0, j=E->getNumArgs(); i<j; i++)
    {
        llvm::errs() << "argType: " << E->getArg(i)->getType().getAsString() << "\n";
    }
    return true;
}

Output:

arg类型: char *
arg类型:int
arg类型:int

请帮助我获得论据。


你的回答非常有帮助,马丁斯。我不知道 printPretty(...) 函数。现在,我可以打印参数了。下面是我打印参数的代码。

bool MyRecursiveASTVisitor::VisitCallExpr (clang::CallExpr *E)
{
    clang::LangOptions LangOpts;
    LangOpts.CPlusPlus = true;
    clang::PrintingPolicy Policy(LangOpts);

    for(int i=0, j=E->getNumArgs(); i<j; i++)
    {
        std::string TypeS;
        llvm::raw_string_ostream s(TypeS);
        E->getArg(i)->printPretty(s, 0, Policy);
        llvm::errs() << "arg: " << s.str() << "\n";
    }
    return true;
}

输出如下所示:

"%d%d"
i
j
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Clang AST 打印函数的参数 的相关文章

  • 如何拦截 .Net 中第三方库对非虚拟方法的调用?

    我认为我需要的是 net 人们称之为 透明动态代理 的东西 但到目前为止我所看到的所有实现 Castle DynamicProxy Spring NET AOP 等 都要求我至少执行以下操作之一 将拦截的方法声明为虚拟方法 包装类并创建包装
  • 即使我没有#include ,为什么仍然可以使用 std::max 和 std::min ?

    include
  • 将数据集导出到 EXCEL

    我使用以下代码将数据库表中的字段导出到 Excel 中 我想要做的是能够编写一条 SQL 语句从多个表中检索字段并将其导出到 Excel 中 这段代码只允许我导出一张表 另外 如何显示保存提示对话框 示例代码将不胜感激 非常感谢 prote
  • 如何将 pem 公钥转换为 openssl RSA* 结构

    假设我必须像这样公开 pem 密钥 BEGIN PUBLIC KEY MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7vbqajDw4o6gJy8UtmIbkcpnk O3Kwc4qsEnSZp TR fQi
  • 将数组从 C# 编组到 C++ 并返回:PInvokeStackImbalance

    我有一个 C 函数 我想从 C 访问它 问题是我不断收到 PInvokeStackImbalance 异常 但我不知道为什么 当检查异常被关闭时 一切都运行良好并且符合预期 我的 C 函数的签名是 extern C double solve
  • 线程安全的get(访问器方法)

    我目前正在使用以下代码对变量进行线程安全访问 int gnVariable void getVariableValue int pnValue acquireLock Acquires the protection mechanism pn
  • WPF MVVM将DataTable绑定到DataGrid不显示数据

    我有一个简单的控件 其中包含一个 DataGrid 其中 ItemsSource 绑定到 DataTable 当我填充 DataTable 时 我可以看到 DataGrid 中添加了行 但没有显示任何数据 我没有为此 DataGrid 使用
  • Reflection.Emit 中的短格式操作码错误

    我正在制作一种与以下非常相似的小语言hlsl但仅支持像素着色器 该语言使用reflection emit构建实现相同功能的 NET 程序集 我目前正在测试分支指令的实现if在我的一个单元测试中 一个大的if与内if elses 失败并显示以
  • ApiController 操作无法从查询字符串解析数组

    使用 Visual Studio 2012 2 MVC4 Web 应用程序 我有请求发送到我的 ApiController 如下所示 http localhost api keys ids 1 ids 2 ids 3 我的印象是以下方法应该
  • 无法使用 ASP.NET Core 从 JWT 令牌获取声明

    我正在尝试使用 ASP NET Core 实现 JWT 持有者身份验证的非常简单的实现 我从控制器返回的响应有点像这样 var identity new ClaimsIdentity identity AddClaim new Claim
  • c#Registry to XML无效字符问题

    我在尝试从注册表创建 XML 文件时遇到问题 在我的笔记本电脑 W7 64b 上它工作正常 生成了 xml 文件 但在另一台计算机 Xp 32b 上抛出异常 System ArgumentException 十六进制值 0x00 是无效字符
  • 我应该使用函数还是无状态函子?

    这两段代码做同样的事情 如您所见 它将用于排序函数 哪个更好 我通常写后一种 但我看到一些程序员像以前那样做 struct val lessthan binary function
  • popen2()在c中如何工作?

    我尝试使用管道 叉子和 dup 在我的程序中执行 md5sume 命令 我发现总和代码运行成功 但我无法理解某些代码行 这是我的代码 int infp outfp char buf 128 if popen2 md5sum infp out
  • 未定义条件编译符号

    我无法让 Visual Studio 按照我的预期运行 我创建了 2 个配置文件 一个定义了符号 FOO 另一个定义了符号 BAR 我有这个代码 static class MyClass if FOO public static strin
  • 为什么 MISRA:2012 需要函数原型?

    我想知道为什么 MISRA 2012 需要函数原型 在下面的示例中 这两个原型并不是真正必要的 include
  • 如何在 Xamarin.Mac 中执行终端命令并读入其输出

    我们正在编写一个 Xamarin Mac 应用程序 我们需要执行像 uptime 这样的命令 并将其输出读取到应用程序中进行解析 这可以做到吗 在 Swift 和 Objective C 中都有 NTask 但我似乎无法在 C 中找到任何示
  • #define, #ifdef #undef #endif

    我有以下代码 define PROC ADD void main void while 1 ifdef PROC ADD Do this code here then undefined it to run the code in the
  • Yield Return == IEnumerable 和 IEnumerator 吗?

    Is yield return实施的捷径IEnumerable and IEnumerator 是的 您可以在我的书 C in Depth 的第 6 章中找到更多相关信息 幸好第六章是免费提供 http www manning source
  • 父窗体中的居中消息框[重复]

    这个问题在这里已经有答案了 有没有一种简单的方法可以在 net 2 0中将MessageBox居中于父窗体中 我在 C 中确实需要这个并发现中心消息框 C http bytes com topic c sharp answers 26712
  • 在 WPF 树视图中获取 FullPath?

    如果我以编程方式创建 WPF TreeView 例如 TreeView treeView lt added in the designer TreeViewItem rootNode new TreeViewItem rootNode He

随机推荐

  • 如何在不使用 Visual Studio 的情况下编译并运行 C# 程序? [复制]

    这个问题在这里已经有答案了 我对 C 很陌生 我刚刚使用 Visual Studio 运行了 C Hello World 程序 我可以在不使用 Visual Studio 的情况下运行或编译 C 程序吗 如果可以的话我应该使用哪个编译器 T
  • 在django中迁移模型时如何解决SQLdecode错误?

    我是 django 新手 我已经创建了一个项目和应用程序 我想将我的项目连接到 mongodb 当我进入python manage py migrate命令 我收到下面提到的错误 我已经删除了数据库并清除了 django migration
  • 如何使用 Wicket 密码保护页面?

    我想用密码保护 Wicket 中的网页 以便用户只有在登录后才能访问它 我还希望该页面显示登录页面 然后在登录用户尝试访问的原始页面后 这是如何用检票口完成的 我已经创建了一个登录页面并扩展了会话类 框架提供的方式是提供一个授权策略 htt
  • 是否可以将泛型类型限制为仅允许已知属性?

    如果向函数提供的对象具有太多属性 则会出现错误 type Options str a b function foo a Options return a str const resultA foo str a extraOption err
  • 迭代包括空行在内的行

    给定一个带有一些空行的多行字符串 我如何在Lua中迭代行包括空行 local s foo nbar n njim for line in magiclines s do print line and blank or line end gt
  • Spark:创建嵌套架构

    伴随着火花 import spark implicits val data Seq 1 value11 value12 2 value21 value22 3 value31 value32 val df data toDF id v1 d
  • 使用 cURL 访问 API 可以正常工作,但使用 Fetch API 则不行 [重复]

    这个问题在这里已经有答案了 我知道这个问题已经得到解决lotSO 上的次数 但所有答案大多都是 向服务器添加某个标头 在这种情况下 API Shopify 工作得非常好 并且可以通过curl轻松访问 我已经使用 Axios 库和 Fetch
  • 如何动态刷新 .NET 数据绑定转发器控件

    我有一个 NET repeater控制即data bound到一个列表 作为中继器的一部分Item Collection 我有一个 删除按钮 可以有效地删除当前的列表元素 这有效 在代码隐藏中我可以成功地从datasource of the
  • 在React中,如何防止组件的CSS导入应用于整个应用程序?

    我在用着Facebook 的 create react 应用 https github com facebookincubator create react app对于我的应用程序 在我的 Login js 容器中 我像这样导入 CSS i
  • 使用 jquery 动态添加画布

    我已将所有代码包含在这个小提琴中 http jsfiddle net RymyY http jsfiddle net RymyY 我的问题涉及左侧的 添加形状 按钮 我希望每次单击第二个添加按钮时都能够添加一个新画布 但我无法让它工作 类似
  • OpenOffice pyno“全选”

    有谁知道如何使用 OO uno 桥接 api 在 Calc 工作表中 选择全部 或者 找到最大使用的行数和列数也可以 我想要做的是将格式应用于电子表格中的所有单元格 原因是我将工作表保存为 csv 因此除非格式提供足够的小数位 否则数字不会
  • 将 Expression> 通用拆箱为 Expression>

    正如标题中提到的 我有一个表达式 其中结果类型 存储 在object 这可以是all我的域类 有没有办法得到具体的表达方式 拆箱 如果我正确理解你的问题 你可能正在寻找的是表达式 转换 http msdn microsoft com en
  • Vue Native 始终执行 App.js 而不是 .vue

    我做了vue native安装的第一个过程 我正在遵循 入门 Hello world教程 https vue native io getting started html https vue native io getting starte
  • 根据文件的第二列对数据进行排序

    我有一个 2 列的文件n行数 第 1 列包含names和第2列age 我想根据以下内容按升序对该文件的内容进行排序age 在第二列 结果应该显示name最年轻的人以及name然后是第二年轻的人等等 关于单行 shell 或 bash 脚本的
  • 如何从 C++ 中加载和调用 VBScript 函数?

    我们的客户要求在我们的产品中发生特定操作时调用 VBScript 函数 我一直在尝试研究 Windows 脚本技术 但很难找到我真正需要的东西 希望你们中的一些人能够提供帮助 我们的产品是原生 C Windows 产品 客户将指定一个 VB
  • 将 sinon 模拟与 nodeunit 一起使用

    我正在学习使用 sinon 与nodeunit https github com caolan nodeunit 专门做嘲笑 这推荐方法 http sinonjs org nodeunit 是使用正节点单元 https github com
  • 如何提取html注释和节点包含的所有html?

    我正在创建一个小型网络应用程序来帮助我管理和分析网站内容 而 cURL 是我最喜欢的新玩具 我已经弄清楚如何提取有关各种元素的信息 如何查找具有特定类的所有元素等 但我遇到了两个问题 见下文 我希望有一些漂亮的 xpath 答案 但如果我必
  • 如何将字符串中的元音更改为符号?

    我需要使用 C 将字符串中的元音更改为 我知道我需要使用 for 循环 并且我很确定我走在正确的轨道上 但我无法让它工作 这是我的代码 include
  • 用于计算拉力赛速度图的数据[重复]

    这个问题在这里已经有答案了 我正在开发一个项目 从拉力赛中提取数据并创建速度图表 我了解要使用的 REST Web 服务 API 是缺陷 迭代 分层需求和迭代累积流数据 但是您能否告诉我如何进行实际计算来计算特定项目的每次迭代速度 需要什么
  • 使用 Clang AST 打印函数的参数

    我想将参数传递给函数 例如 如果我接到电话 printf d d i j 输出应该是 d dij 我可以使用 RecursiveASTVisitor 中的 VisitCallExpr 进行函数调用 还能够获取参数数量和参数类型 但我不知道如