如果我理解正确,静态分析可以猜测变量可以具有什么值,并推断出,例如,控制流图中的哪个路径永远不会被执行。
我有一个常量字符串CStr的数组。 GetValue方法接受参数中的索引并进行一些计算以查找CStr数组中的实际索引,并返回指向该索引的const字符串。
编辑:对于给予GetValue
的每个参数,实际索引是唯一且常量静态分析可以猜测GetValue(x)会有一个常量值吗?如果是的话,它是如何完成的?
答案 0 :(得分:2)
“静态分析可以猜测GetValue(x)会有一个常量值吗?”
这完全取决于静态代码分析工具的功能和质量 从可能发现的理论来看,是的。
如果你的意思是编译器可以推断出常量表达式,它还取决于编译器的实际实现。
您可以提供的最佳提示是使用constexpr
关键字,例如
constexpr int GetValue(int x);
“如果是的话,怎么做?”
这是一个非常广泛的领域,很难在这里给出简明的答案 基本上,静态代码分析工具会跟踪特定函数的调用引用。如果可以推导出这些函数的结果是在编译时指定的值(例如,由于静态初始化),则来自调用函数的访问地址的实际有效大小/索引是已知的,并且如果已知,则可以将其标记为问题。它超出界限。