控制流图(Control Flow Graph)-(CFG)

article/2025/9/4 6:55:33

1.定义

百度百科:

控制流图(Control Flow Graph, CFG)也叫控制流程图,是一个过程或程序的抽象表现,是用在编译器中的一个抽象数据结构,由编译器在内部维护,代表了一个程序执行过程中会遍历到的所有路径。它用图的形式表示一个过程内所有基本块执行的可能流向, 也能反映一个过程的实时执行过程。
Frances E. Allen于1970年提出控制流图的概念。此后,控制流图成为了编译器优化和静态分析的重要工具。

维基百科:

原文:
In a control-flow graph each node in the graph represents a basic block, i.e. a straight-line piece of code without any jumps or jump targets; jump targets start a block, and jumps end a block. Directed edges are used to represent jumps in the control flow. There are, in most presentations, two specially designated blocks: the entry block, through which control enters into the flow graph, and the exit block, through which all control flow leaves.
译文:
在控制流图中,图中的每个节点代表一个基本块,即一段没有任何跳转或跳转目标的直线代码;跳转目标开始一个块,而跳转结束一个块。有向边用来表示控制流中的跳转。在大多数演示中,有两个特别指定的块:入口块,控制通过它进入流程图;出口块,所有控制流通过它离开。

控制流图的几种结构:

2.特点

  • 控制流程图是过程导向的
  • 控制流程图显示了程序执行过程中可以遍历的所有路径
  • 控制流程图是一个有向图
  • CFG 中的边描述控制流路径,节点描述基本块
  • 每个控制流图都存在2个指定的块:Entry Block(输入块),Exit Block(输出块)

3.实例

  • 例1:
if  A = 10 thenif B > CA = Belse A = Cendifendif
print A, B, C 

其控制流图为:

  • 例2:计算整数X和整数Y的最大公约数
int gsd(int x,int y)
{int q=x;int r=y;while(q!=r){if (q>r)q=q-r;else r=r-q;}return q;
}

其控制流图为:

 

4.控制依赖性(Control dependencies)

Control dependency is a situation in which a program instruction executes if the previous instruction evaluates in a way that allows its execution.

控制依赖讲的是:在某种情况下,一个程序指令的执行依赖于前面指令的执行(在前面某个指令执行后才会执行)。

下面从一个例子来说明控制依赖性:

S1:   if x > 2 then
S2:       y = 3   

上面我们可以看出:只有在S1语句x > 2时,才会执行S2语句,也就是说S2的执行受S1语句的控制(影响),那么我们就称S1与S2具有控制依赖性。

5.数据依赖性(Data dependencies):

数据依赖产生于两个访问或修改相同资源的语句。

同样从例子来说明数据依赖性:

1       x = 10
2       y = x + c

从上面我们可以知道:x 值的变化会引起 y 值得变化,那么我们就称 y 依赖于 x,y 与具有数据依赖性。

参考

  1. 控制流图、圈复杂度_spring_willow的博客-CSDN博客_控制流图圈复杂度计算
  2. 控制流图_百度百科
  3. https://en.wikipedia.org/wiki/Control-flow_graph
  4. Software Engineering | Control Flow Graph (CFG) - GeeksforGeeks
  5. https://en.wikipedia.org/wiki/Dependence_analysis#Control_dependencies
  6. Perl until 循环 | 菜鸟教程

梦不会逃走,逃走的一直都是自己。

——《蜡笔小新》

http://chatgpt.dhexx.cn/article/r2YY2oli.shtml

相关文章

【大学生软件测试基础】白盒测试 - 控制流图 - 01

任务1、画出程序流程图; 任务2、画出控制流图; 任务3、根据程序环形复杂度的计算公式,求出程序路径集合中的独立路径数目; 任务4、根据环形复杂度的计算结果,源程序的基本路径集合中有多少条独立路径; …

控制流图(Control Flow Graph, CFG)

The if Statement if (x < y) {y 0;x x 1; } else {x y; } if (x < y) {y 0;x x 1; } The if-return Statement if (x < y) {return; } print (x); return; 注意&#xff1a;2到3 没有边 while and for Loops x 0; while (x < y) {y f (x, y);x x …

C语言之美——平方根倒数快速计算

C语言之美——平方根倒数快速计算 前言 由于特殊原因&#xff0c;陆陆续续接触陀螺仪很长一段时间&#xff0c;对于各种解析算法的运算速率有了切身体会&#xff0c;不断追求更快、更准。最近&#xff0c;发现了一份比较特殊的平方根倒数速算法&#xff0c;一下子来了兴趣&am…

【C语言求素数(质数)的三种方法】

失踪人口回归&#xff0c;假期因为太懒&#xff0c;刚开学的这几天又真的忙&#xff0c;所以好长时间没有发文章了&#xff0c;马上我们要进行C语言考试了&#xff0c;我发现学的东西好多都不太懂&#xff0c;所以慢慢要在进行一次复习了&#xff1b;上周数据结构课上老师让写程…

平方根求和c语言编程,计算并输出3到100(包括3和100)之间所有素数之和的平方根。 C语言,求救...

满意答案 zh19951006 2014.07.02 采纳率&#xff1a;56% 等级&#xff1a;12 已帮助&#xff1a;6562人 //先求3到100间的所有素数,存在数组中; //求该数组的所有为素数的元素之和,然后开方求平方根 #include <stdio.h> #include <math.h> int sushu[98];//开辟…

word封面下划线怎么对齐(非常简单+彻底解决)

之前遇到这个问题&#xff0c;也在网上百度了很多次&#xff0c;有的说段落调整对齐方式为两端对齐&#xff0c;对称什么的&#xff0c;试了一下都不管用&#xff0c;也有的说是加一个表格&#xff0c;但是并没有解决根本问题&#xff0c;最后突然想起&#xff0c;有一次打印东…

【Office】Word空格无法添加下划线

缘由 在弄文档封面的时候&#xff0c;需要在项目名称后面加一条下划线 于是出现了这个情况&#xff1a; 1.在没有内容的一行&#xff0c;带下划线的空格直接不显示下划线了&#xff08;下图第一行&#xff09; 2.空格应用下划线格式&#xff0c;内容前面的是能显示的&#…

Word公式居中,公式编号右对齐

1. 选择开始-样式-新建样式。编辑名称为公式 2. 左下角选择格式-制表位 打开Word标尺&#xff0c;找到中间和最右边的位置。比如我这里是17和34&#xff0c;输入位置分别设置居中对齐和右对齐 3. 在样式中选择公式 4. 在公式右侧键入编号&#xff0c;然后将光标放在公式左侧&am…

php输入域无法对齐,下划线输入内容后怎么对齐

下划线输入内容后设置对齐的方法&#xff1a;首先打开Word&#xff1b;然后依次选择“菜单栏->插入->表格”&#xff1b;接着将内容分别输入表格中&#xff0c;并调整表格的列宽等格式&#xff1b;最后右键选择“边框和底纹”&#xff0c;并设置只保留底部边框和中间横线…

Word 里文字对齐的4种方法

转自&#xff1a;微点阅读 https://www.weidianyuedu.com 我们在用Word写论文、制作简历的时候&#xff0c;通常会遇到把word中某些特定文字对齐的情况。那么问题来了&#xff0c;你平时都是怎么对齐文字的&#xff1f;傻傻的用空格来对齐吗&#xff1f; 在字符数不等的情况下&…

Word 里文字对齐4种方法推荐

我们在用Word写论文、制作简历的时候&#xff0c;通常会遇到把word中某些特定文字对齐的情况。那么问题来了&#xff0c;你平时都是怎么对齐文字的&#xff1f;傻傻的用空格来对齐吗&#xff1f; 在字符数不等的情况下&#xff0c;加空格不仅麻烦而且不准确&#xff0c;下面传…

Windows系统中Word文档中文字后面的空格下的下划线不显示的解决办法

笔者最近在做课程设计&#xff0c;需要写Word文档&#xff0c;在写文档的时候遇到了一堆bug&#xff0c;现在课程设计肝完了&#xff0c;终于有时间梳理梳理这些bug然后发布出来做个备忘录。    第一个bug是Windows系统中Word文档中文字后面的空格下的下划线不显示&#xff0…

word里面怎样输入空白下划线

在编写文档时&#xff0c;有时需要留些空格下划线的位置&#xff0c;那怎么加入空白下划线呢&#xff1f;下面我用我常用的speedoffice来说明一下。 方法1&#xff1a;将输入法设置为英文状态&#xff0c;同时按下“Shift”键和“-”键即可可持续不断敲空白下划线。 方法2&…

Word空格自动加下划线

经常用到在文档签署页加下划线&#xff0c;老是忘记&#xff0c;记录下来&#xff0c;步骤如下&#xff1a; 文件——选项——高级——为尾部空格添加下划线&#xff08;选中&#xff09;——确定。

解决word空格后无法打出下划线

问题 即使点击了word开始菜单栏中的下划线选项&#xff0c;也打不出下划线 解决办法 找到word的&#xff1a; 1-文件 ——>2-选项——>3-高级——>4-以下对象的布局选项——>5-为尾部空格添加下划线

Word中下划线自动换行版式不…

原文地址&#xff1a;Word中下划线自动换行版式不变形 作者&#xff1a;破烂小笔 Word中编辑合同、协议、考卷、介绍信一类文档时&#xff0c;往往需要在文本中留出一定的空格并设置下划线以便填写。当这些空格出现在上一行末和下一行开头时&#xff0c;如果空格后有字符则会造…

怎么让WORD中多行(常带下划线)头和尾都完全对齐

『如何』让WORD中多行&#xff08;常带下划线&#xff09;头和尾都完全对齐 “为啥Word多行下划线后面总是长短不一&#xff0c;无论怎么调不是多了就是少了&#xff1f;怎样才能完美对齐呢&#xff1f;” 通过本文你可以 如何对齐Word中的多行文本&#xff0c;达到可以容忍的…

解决 Word 中空格下划线居中后下划线不显示的问题

1、Word 左上角“文件”--“选项”--“高级”--“以下对象的布局选项”--“为尾部空格添加下划线” 2、选中要居中的部分&#xff0c;右键“段落”--“缩进和间距”--常规 对齐方式“居中”&#xff0c;一定要在这里选才可以 “中文版式”--选中“允许西文在单词中间换行” 效果…

word封面下划线对齐

word封面下划线对齐 如图所示&#xff0c;班级下划线与前面三条下划线没有对齐 于是你尝试删除 &#xff0c;可是删除一下却删多了。 不要慌张&#xff0c;按我说的办。全删掉&#xff0c;重来。 首先插入一个2*4的表格 输入内容 对文本稍作调整 全选表格&#xff0c;右击选择…