2

私はframa-cツールを使用して以下のコードを分析します。

  int main (int argc, char *argv[])
  {
     int i,a;
     for (i = 0; i < 100; i += 1)
     {
        a=0;
        if (a==0)
        {
            continue;
        }
        else
        {
            break;
        }
     }
     return 0;
  }

cmdは

   frama-c -pdg -dot-pdg graph main.c

11

私の質問は、コントロールの依存関係についてです。サークルノードとはどういう意味ですか?「while」ノードについて説明しようとしています。ループは「i<100」から始まるため、制御依存関係があります(「i<100」------o「while」)。 )。私が推測することは正しいですか?しかし、「ブレーク」ノードとはどういう意味ですか?そのノードは「goto__Cont;」だと思います。「休憩」に関連しています。「else」ブロックのステートメント。
コントロールの依存関係を完全かつ正確に理解するための明確な抽象モデルは頭の中にないと思います。私を助けてくれませんか、それとも何か提案をしてくれませんか?事前タオに感謝します。

4

2 に答える 2

1

そのほとんどは自明です:

  • 円-フロー制御(分岐)
  • ひし形-状態(a == 0など)
  • 正方形-割り当て

forループがwhileループに変換されました

于 2012-03-29T13:51:25.227 に答える
1

コマンドframa-c -print main.cを使用して、プログラムがどのように翻訳されたかを確認します(以下に翻訳版を含めます)。

正規化されたバージョンのステートメントは、元のステートメントgoto __Cont;の翻訳ですcontinue;

そして、Binyaminが言ったように、forループはループに正規化されましたwhile

int main(int argc, char **argv)
{
  int __retres;
  int i;
  int a;
  i = 0;
  while (i < 100) {
    a = 0;
    if (a == 0) { goto __Cont; }
    else { break; }
    __Cont: /* internal */ i ++;
  }
  __retres = 0;
  return (__retres);
}
于 2012-03-29T14:47:25.390 に答える