静态分析常数值

时间:2014-11-28 20:03:11

标签: c++ c static analysis

如果我理解正确,静态分析可以猜测变量可以具有什么值,并推断出,例如,控制流图中的哪个路径永远不会被执行。

我有一个常量字符串CStr的数组。 GetValue方法接受参数中的索引并进行一些计算以查找CStr数组中的实际索引,并返回指向该索引的const字符串。

编辑:对于给予GetValue

的每个参数,实际索引是唯一且常量

静态分析可以猜测GetValue(x)会有一个常量值吗?如果是的话,它是如何完成的?

1 个答案:

答案 0 :(得分:2)

  

“静态分析可以猜测GetValue(x)会有一个常量值吗?”

这完全取决于静态代码分析工具的功能和质量 从可能发现的理论来看,是的。


如果你的意思是编译器可以推断出常量表达式,它还取决于编译器的实际实现。

您可以提供的最佳提示是使用constexpr关键字,例如

 constexpr int GetValue(int x);

  

“如果是的话,怎么做?”

这是一个非常广泛的领域,很难在这里给出简明的答案 基本上,静态代码分析工具会跟踪特定函数的调用引用。如果可以推导出这些函数的结果是在编译时指定的值(例如,由于静态初始化),则来自调用函数的访问地址的实际有效大小/索引是已知的,并且如果已知,则可以将其标记为问题。它超出界限。