我正在为C代码分析编写程序。
考虑到我想要分析的代码中不能有switch语句,是否有一种语句具有两个以上的后继语句?
据我所知,if
,while
和其他一些人正好有两个后继陈述,其余我能想到的有一个,我无法想到另一种情况,有两个以上。
我的问题是指同一函数中的后继者,而不是将被调用函数(或它的第一个语句)的函数调用视为目标。
有没有我没注意到的情况?
修改
作为一个例子,我想分析以下代码(我知道它可以优化,只是一个例子):
int func(int z){
int y;
if (z<0){
y=1;
}
else{
y=2;
}
return y;
}
我得到以下结构(由评论描述,不容易以文字方式描述):
int y; //first statement, not successor of another statement
if (z<0) //successor of `int y`, has two successors
y=1; //first successor of `if (z<0)`
y=2; //second successor of `if (z<0)`
return y; //successor of `y=1` and `y=2`
因此语句if (z<0)
有2个后继,一个用于then-branch,另一个用于else分支。所以我的问题是,如果有像if这样的结构,但是有两个以上的后继者。一个循环也有2个后继,循环体和循环后的语句。
我希望我的问题现在更清楚了。
答案 0 :(得分:0)
我不知道这是否属于您的范围,但请考虑function pointers - 您根本不知道最终会在哪里:
void foo(void (*bar)()) {
bar();
}
此外,setjmp()
and longjmp()
可能会让事情变得复杂。
关于你的陈述
if和while恰好有2个后继语句,而其他所有语句都有 一个
这些不是唯一的。想想for
循环。