我正在编写一个用于C代码分析的程序。

考虑到我要分析的代码中不能包含切换语句,是否有一种方法可以包含两个以上的后继语句?

据我所知,ifwhile和其他一些恰好有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循环。

10-07 14:47