zoukankan      html  css  js  c++  java
  • 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
    ", nFirst);
    	if (nTotal == 1)
    	{//假设用户要求输出的数量为1。则到此为止
    		return;
    	}
    	//先把头两个数输出出来
    	printf("%d
    ",nSecond);
    	if (nTotal <= 2)//假设用户指定输出数量不超过2个,则到此为止
    		return;
    	for (i = 2; i < nTotal;i++)
    	{
    		nThird = nFirst + nSecond;
    		printf("%d
    ", 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! ");

    }

    那么非常好,那条输出函数printf("done! ");将总是被运行。

    由于赋值表达式的值,总是和它被赋的值相等

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

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

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

    if这个逻辑推断keyword后面的小括号,仅仅能写入表达式,不能写入语句

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

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

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

    这个语法特征是forkeyword独有的,别无分号。

    当然。你能够把代码写成这样:

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

    详细操作例如以下:

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

    当然。也能够在代码行号前面单机鼠标左键

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

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

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

    黄色箭头表示如今程序将要运行的代码行

    这个时候你能够按下F10来一条一条运行代码

    然后你能够观察for语句中的代码是怎样运行的

    假设你想释放调试。仅仅须要在设置断点的行。点击红色的点清除断点,然后按下F5键就可以

    只是如今你能够先单步看看,代码在for模块中是怎样运行的

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

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

    通过这个方式你能够观察i是怎样变化的

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

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

  • 相关阅读:
    MTD NANDFLASH驱动相关知识介绍
    Java 根据当前时间获取明天、当前周的周五、当前月的最后一天
    使用 Spring 进行单元测试
    Centos下MySQL主从同步配置
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
    CentOS 7 配置静态IP
    mysql 配置 utf8 依然乱码
    rabbitMQ Connection timed out
    CentOS 7.0,启用iptables防火墙
    linux注销、关机、重启
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6812463.html
Copyright © 2011-2022 走看看