由于LARGEADDRESSAWARE,检测指针算术

Sum*_*uma 8 c++ pointers static-analysis visual-studio

我想将我的应用程序切换到LARGEADDRESSAWARE.需要注意的一个问题是指针算法,因为指针差异不能再表示为带符号32b.

有没有办法如何在大型C++项目中自动查找指针减法的所有实例?

如果没有,是否有一些"尽力而为"的手动或半自动方法如何实现这一目标?

Sum*_*uma 0

由于我们的代码已经使用 GCC 进行编译,我认为最快的方法可能是:

  • 建立海湾合作委员会
  • 创建 GCC 的自定义修改,以便在检测到指针减法时打印警告(或错误)
  • 构建项目并收集有关指针减法的所有警告

以下是 GCC 为此需要进行的更改概要:

将您的警告添加到:

  • c-typeck.c(pointer_diff函数)
  • cp/typeck.c(pointer_diff函数)。

除了直接检测指针减法之外,要做的另一件事是检测首先将指针转换为整型然后减去它们的情况。这可能会更困难,具体取决于代码的结构,在正则表达式搜索 (.intptr_t ) 的情况下。-.*-(.*intptr_t) 效果很好。