【发布时间】:2011-09-11 04:13:50
【问题描述】:
我正在研究将大量(>10M 行)C++ 代码移植到 64 位的方法。我已经研究了静态代码分析器和编译器标志,现在我正在研究可以进行常见重复更改的宏或其他工具。
我已经编写了一些正则表达式来看看它们在实践中的效果如何,并且正如预期的那样,它们非常有效。也就是说,首先构建表达式需要一段时间,所以我想看看是否有任何此类表达式的列表或可以自动执行更改的软件工具。
以下几行是要匹配和修复的代码的原型示例。 (澄清一下,这些行并不代表单个代码块,而是从不同地方提取的行。)
int i = 0;
long objcount;
int count = channels.count(ch);
for (int k = 0; k < n; k++) { /*...*/ }
目标不是将代码彻底移植到 64 位,而是对代码执行第一次传递以减少需要手动检查的代码量。遗漏一些必要的更改是可以的,可能可以进行一些错误的更改,但应尽量减少这些更改。
Visual Studio 是将用于转换工作的 IDE,因此与 VS 配合良好的东西是一个加号。成本不是问题。
【问题讨论】:
-
这些行在什么意义上需要修复?
-
@Oli:示例没有显示,但
int count可能太小,无法容纳channels.count的size_t返回。在 for 循环中,int k可能会在达到long n的大小之前进行换行。等等。 -
@Henry 为什么在 32 位中 int Ok 而在 64 位中却不行?
-
在我移植的代码中(诚然,在编写时考虑到了可能的 64 位端口),编译器将所有问题作为警告突出显示。修复并不总是提升到 size_t;在某些情况下,需要添加强制转换(或运行时检查)以明确 32 位是合适的。
-
@Henry:我怀疑你能找到这样的工具,因为当你移植它时,正确代码工作得很好。错误代码的问题在于它不遵守任何规则,因此自动化工具很难处理。
标签: c++ 64-bit 32bit-64bit