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