zerglurker的C语言教程007——代码执行的顺序

软件开发中,代码有三种基本执行顺序:

顺序执行 代码从入口开始一条一条执行,直到返回或者结束

循环执行 在设定条件后,代码重复执行某一个或多个部分,直到达到某些条件后终止

条件执行 代码会先判断某些条件,如果满足则执行部分代码,如果不满足则执行另一部分代码

实际当中,这三种执行顺序是交错出现的。你中有我,我中有你。

下面是上节课的代码,我们来一句一句的分析看,你就会明白我上面说的是什么了:

#include <stdio.h>
#include "public.h"

int main(int argc, char* argv[], char* env[])
{
	Fibonacci(10);
	return 0;
}

void Fibonacci(unsigned int nTotal)
{
	int nFirst = 1;
	int nSecond = 1,nThird;
	unsigned int i;
	if (nTotal == 0){
		return;//如果用户要求输出的数量为0,则什么都不输出
	}
	printf("%d\n", nFirst);
	if (nTotal == 1)
	{//如果用户要求输出的数量为1,则到此为止
		return;
	}
	//先把头两个数输出出来
	printf("%d\n",nSecond);
	if (nTotal <= 2)//如果用户指定输出数量不超过2个,则到此为止
		return;
	for (i = 2; i < nTotal;i++)
	{
		nThird = nFirst + nSecond;
		printf("%d\n", nThird);
		nFirst = nSecond;
		nSecond = nThird;
	}
}
首先是main函数,整个代码的4-8行

这是一段典型的顺序执行代码。从函数入口开始,一步一步执行。

顺序执行的代码逻辑比较清晰,没有什么歧义。

然后是比较复杂的Fibonacci函数(10-34行)

12-14行是明显的顺序执行。主要是声明并初始化变量。

15-17行就是一个典型的条件执行顺序。只有当nTotal为0的时候才会执行大括号里面的代码,否则直接跳过

注意=号表示赋值,而==表示逻辑等判断。然而C/C++中一个比较坑爹的设定是,即使是赋值表达式,也是有返回值的。

比如:nFirst=1这个表达式

如果你这么判断

if(nFirst=1){

    printf("done!\n");

}

那么很好,那条输出函数printf("done!\n");将总是被执行。因为赋值表达式的值,总是和它被赋的值相等

也就是nFirst=0这个表达的值永远等于0

所以当你是要进行nFirst是否等于1的条件判断时,一定要用==而不是=

另外 表达式的含义是没有; 有;的是语句

if这个逻辑判断关键字后面的小括号,只能写入表达式,不能写入语句

但是请注意27-33行这个循环模块

for后面的括号里面是有两个语句和一个表达式。

和你看到的不一样(i = 2; i < nTotal;i++),这三条中,只有第一条i = 2和最后一条i++是语句,中间那条是表达式

这个语法特征是for关键字独有的,别无分号。

当然,你可以把代码写成这样:

        for (i = 2;
		i < nTotal;
		i++)
	{
		nThird = nFirst + nSecond;
		printf("%d\n", nThird);
		nFirst = nSecond;
		nSecond = nThird;
	}
我们实际调试一下,看看代码会如何执行

具体操作如下:

选中上面代码的第一行,然后选择 调试-新建断点-在函数处中断 如下图:

当然,也可以在代码行号前面单机鼠标左键

或者选中行之后,按下Ctrl+B按键来建立断点

断点建立好之后,按下F5来启动调试。注意是F5不是Ctrl+F5

一切顺利的话,你就会看到如下内容:

黄色箭头表示现在程序将要执行的代码行

这个时候你可以按下F10来一条一条执行代码

然后你可以观察for语句中的代码是如何执行的

如果你想释放调试,只需要在设置断点的行,点击红色的点清除断点,然后按下F5键即可

不过现在你可以先单步看看,代码在for模块中是如何执行的

没有意外的话,你会发现i=2这条,只执行了一次;而i++则从第二次循环才开始执行;i<nTotal则每次都执行

在调试过程中,如果你的鼠标停止在某个变量上面,则会显示变量当前的值

通过这个方式你可以观察i是如何变化的

好了,代码的三种执行顺序已经讲完了

各位可以好好练习一下调试代码,以后这个技能会伴随你的整个开发生涯

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值