gpt4 book ai didi

c++ - 是否有任何工具可以 "find references"内置操作?

转载 作者:行者123 更新时间:2023-11-30 04:39:24 25 4
gpt4 key购买 nike

我正在阅读 this item in the Google C++ style guide 下的解释这让我开始思考; 是否有任何工具可以像 VS 的“查找所有引用”工具一样工作,但用于内置操作等?例如,我想找到所有使用 native “+”运算符的地方指针(或者可能只是一个指向对象的指针)和一个整数,或者添加有符号和无符号类型的地方。

最佳答案

要确定哪些操作是“内置的”,您必须能够解析 C++,并为每个子表达式确定操作数的类型。当操作数是 char、int、long、float、double、pointer 等类型的标量时,将选择内置操作。(非内置的是函数名称和运算符标点符号,已用于覆盖各种类定义中的此类运算符)。

按照大多数人的标准,解析 C++ 相当困难。 “只是”一个解析器/词法分析器不会很快或很容易地把你带到那里。真正困难的是解析名称的含义,确定名称的类型,然后确定各种子表达式的含义,因为您必须对描述所有工作原理的数百页 C++ 标准进行编码。您真正想要的是一个预构建的 C++ 前端,它会随您的意愿而变。

虽然 GNU 和 MSVC 具有完整的 C++ 前端,但它们真的想成为一个编译器,而且几乎不能被迫轻松地帮助您。

DMS Software Reengineering Toolkit将是这项任务的理想选择。它旨在支持自定义分析工具的构建,并具有适用于许多标准语言的完整语言前端,包括 C、Java、C#、COBOL ……最后是 C++。

DMS 像编译器一样解析源文本,构建编译器数据结构(树、符号表等)并使这些数据结构主要通过程序 API 可用,以便您针对这些数据结构编写查询。

其中一个查询是“对于这棵树,它是什么类型的?”。使用它,可以非常简单地确定您是否有一个“标准”运算符,例如 integer-add。

编辑:(奇怪的是,在写完这个答案几天后,我刚刚得到一份小契约(Contract),用于识别 C++ 程序中的所有非内置运算符!)。

关于c++ - 是否有任何工具可以 "find references"内置操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2246845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com