C:没有切换代码的​​语句的两个以上后继者

时间:2016-10-31 07:47:01

标签: c

我正在为C代码分析编写程序。

考虑到我想要分析的代码中不能有switch语句,是否有一种语句具有两个以上的后继语句?

据我所知,ifwhile和其他一些人正好有两个后继陈述,其余我能想到的有一个,我无法想到另一种情况,有两个以上。

我的问题是指同一函数中的后继者,而不是将被调用函数(或它的第一个语句)的函数调用视为目标。

有没有我没注意到的情况?

修改

作为一个例子,我想分析以下代码(我知道它可以优化,只是一个例子):

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个后继,循环体和循环后的语句。

我希望我的问题现在更清楚了。

1 个答案:

答案 0 :(得分:0)

我不知道这是否属于您的范围,但请考虑function pointers - 您根本不知道最终会在哪里:

void foo(void (*bar)()) {
  bar();
}

此外,setjmp() and longjmp()可能会让事情变得复杂。

关于你的陈述

  

if和while恰好有2个后继语句,而其他所有语句都有   一个

这些不是唯一的。想想for循环。