【发布时间】:2011-12-08 15:33:14
【问题描述】:
给定一个只有 if/else 语句的程序,是否可以决定哪些变量出现但从未读取?
【问题讨论】:
-
如果程序只包含 if/else 语句,它们里面会是什么?
-
“发生但从未读取”是指“已修改/初始化但从未访问过”吗?
标签: theory
给定一个只有 if/else 语句的程序,是否可以决定哪些变量出现但从未读取?
【问题讨论】:
标签: theory
是的。给定一个只有 if/else 语句的程序[假设没有向后分支和循环],程序中有有限数量的路径。
您可以检查所有这些,检查必须满足哪些条件才能到达每个路径,并找到矛盾[无法访问的路径],从而找到从未使用过的变量。
这可以实现为Hoare logic 的更简单版本,自动化非常简单,没有循环。 [用循环当然不可能自动化它]
【讨论】:
您可以在特定的 if 块中放置跟踪或调试语句,例如
if (assertion)
{
// print or echo or var_dump etc..
}
else if(assertion)
{
// print or echo or var_dump etc..
}
else if(assertion)
{
// print or echo or var_dump etc..
}
如果您可以通过这种方式跟踪代码,则可以断言块中的任何变量或代码将被执行/读取。
【讨论】: