我正在编写一个用于C代码分析的程序。
考虑到我要分析的代码中不能包含切换语句,是否有一种方法可以包含两个以上的后继语句?
据我所知,if
,while
和其他一些恰好有2个后继声明,其余我可以想到的都有,而我想不出另一种情况,即有两个以上。
对于我的问题,我的意思是同一功能内的后继者,而不是考虑将被调用函数(或它的第一条语句)作为目标的函数调用。
有没有我没注意到的情况?
编辑:
作为示例,我想分析以下代码(我知道可以对其进行优化,只是一个示例):
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的结构,但具有两个以上的后继结构。一个循环还将有两个后继者,循环主体和循环后的语句。我希望我的问题现在更加清楚。
最佳答案
我不知道这是否在您的范围内,但请考虑function pointers-您根本不知道最终的结果:
void foo(void (*bar)()) {
bar();
}
另外,还有
setjmp()
and longjmp()
可能会使事情变得复杂。关于您的陈述
如果且同时有2个后继陈述,而其他所有陈述
一
这些不是唯一的。考虑一下
for
循环。