![]() |
1
31
如果您使用的是g c c/g++,只需为C样式的强制转换启用一个警告:
|
![]() |
2
8
这种类型的铸件很难找到,这是最早引入新型铸件的原因之一。如果代码正常工作,这看起来是一个毫无意义的重构——只要我修改了周围的代码,我就把它们改成新的类型转换。 话虽如此,事实上,在C++代码中有C样式的转换将指示代码的问题,这些代码应该是固定的——即使不是可能的话,我也不会只做一个全局替换。 |
![]() |
3
6
正在搜索正则表达式
|
![]() |
4
6
这个 Offload C++ compiler 支持将所有此类强制转换报告为编译时错误的选项,并将此类强制转换的语义限制为与静态强制转换更安全地等效。 相关选项包括:
编译器将在所有C样式转换上发出错误。C++代码中的C样式转换可能是不安全的,导致不希望的或未定义的行为(例如,将指针指向无关的结构/类类型)。这个选项对于重构来说是有用的,以找到所有这些转换,并用更安全的C++转换(如StasyType)替换它们。
编译器将C++ STATICE-CAST的更为受限的语义应用到C样式的转换。使用此选项打开代码,确保C样式的转换至少与C++静态模型一样安全。 如果现有代码中有大量C样式的转换和重构,则每个选项都是非常有用的。 |
![]() |
5
1
一种工具,可以准确地分析C++源代码并执行自动自定义更改(例如,您的CAST替换) DMS Software Reengineering Toolkit . DMS有一个完整的C++解析器,构建了AST和符号表,因此可以导航您的代码以可靠地找到C样式的铸件。通过使用模式匹配和重写,您可以提供一组规则,这些规则可以将所有这样的C样式转换转换成所需的C++等价物。 DMS已经被用于为波音和一般动力学执行大规模的自动化C++重构任务,每个任务涉及数千个文件。 |
![]() |
6
0
C样式的强制转换的一个问题是,由于它们依赖于超负荷的括号,因此它们并不容易被发现。不过,regex(例如,在python语法中):
是一个开始——它将括号中的单个标识符与括号中的可选空白相匹配。但当然不会,例如,
你也可以从一个选项开始
一旦你有了一个好的资源,很多工具(从
|
![]() |
7
0
如果使用某种匈牙利风格的符号(例如
即使对于大型代码库,也应该可以在合理的时间内找到所有这些位置。 |
![]() |
8
0
我已经回答过一次,描述了一个工具 改变 如果你想的话,所有的演员都可以。 如果你只想做 找到 在这种类型转换中,还有另一个工具可以轻松完成这一任务,实际上是对这里提出的所有“正则表达式”建议的极端概括。那就是 SD Source Code Search Engine . 这个工具可以根据构成每种语言的语言元素来搜索大型代码库。它提供了一个图形用户界面,允许您输入查询、查看单个点击,并通过鼠标单击在点击点显示文件文本。再单击一次,您就可以在一个文件的编辑器中[对于许多编辑器]。该工具还将记录上下文中的点击列表,以便您以后可以重新访问它们。 在您的案例中,以下搜索引擎查询可能会获取大部分强制转换:
这意味着,找到一个标记序列,第一个是(,第二个是任何标识符,第三个是'),或者一个类似的序列,包含以'*'结尾的内容。 您没有指定任何空白管理,因为工具了解语言空白规则;它甚至会忽略转换中间的注释,并且仍然与上面的内容匹配。 [我是这家公司的首席技术官。] |
![]() |
9
-1
我在Visual Studio(2010)的“文件”搜索框中使用了此正则表达式:
感谢某事物的启发( his post ) |
![]() |
Community wiki · C中有哪些耗时的操作? 1 年前 |
![]() |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
![]() |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
![]() |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |