• C语言禁术——goto语句


    goto语句是一种无条件转移语句,goto 语句的使用格式为:
         goto  语句标号;
    其中标号是一个有效的标识符,这个标识符加上一个“:”(冒号)一起出现在函数内某处,执行goto语句后,程序将跳转到该标号处并执行其后的语句。

    另外标号必须与goto语句同处于一个函数中,但可以不在一个循环层中。通常goto语句与if条件语句连用,当满足某一条件时,程序跳到标号处运行。

    goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时,用goto语句则比较合理。

    大多数人在学习C语言的时候都或多或少的看过或者听过不要使用goto语句,但是,在某些时刻,该goto时就goto。

    eg:

    #include <stdio.h>
    #include <stdint.h>
    #include <string.h>
    
    int main(void)
    {
        for(int i=0;i<100;i++)
            for(int j=0;j<100;j++)
            {
                if(i+j==100)
                {
                    goto test;
                }
            }
    test:
    printf("test...
    ");
        return 0;
    }

    这个例子可能是大家见的最多的跳出循环用法,因为这里break不好使。但是。。。

    eg:

    #include <stdio.h>
    int main(void)
    {
        int a=2;
        if(a>2)
        {
            
            for(int i=0;i<10;i++)
            {
                printf("i=%d ",i);
                if(i==5)
                    goto test;
            }
        }
    test:
        printf("
    yes");
    return 0;
    }

    第一次尝试使用goto的时候,有一个误区,就是如果没有执行goto,goto的标签会不会执行?

    我之前以为不会执行,但是,goto的标签,就是程序的一部分,哪怕没有执行goto,goto的标签也会顺着程序执行流程而执行(如上图测试一样)。这就给我们写程序的时候带了隐藏的bug,千万别以为goto不执行,标签就不执行了。

    Summary:

    在我们使用goto跳出循环或者处理关键代码段的时候,goto标签的位置,一定是异常处理的位置,哪怕不执行goto,标签也会执行。但很多时候,goto出去的代码段都是关键代码处理,在没有执行goto的时候,我们不想标签处的代码被执行(比如异常处理),这样我们就可以通过下面的方式做到:

    eg:

    #include <stdio.h>
    int main(void)
    {
        int flag=0;
        int a=2;
        if(a>2)
        {
            
            for(int i=0;i<10;i++)
            {
                printf("i=%d ",i);
                if(i==5)
                {
                    flag=1;
                    goto test;
                }
            }
        }
        if(flag==1)
        {
            test:
            printf("
    yes");
        }
    return 0;
    }

  • 相关阅读:
    雷观(四):手机不可能取代电脑
    小雷FansUnion:我有了第一个付费客户(第一个徒弟)
    小雷FansUnion:我有了第一个付费客户(第一个徒弟)
    博客搬家算法伪码
    博客搬家算法伪码
    MySQL数据库定时自动备份脚本
    Java实现 LeetCode 386 字典序排数
    Java实现 LeetCode 386 字典序排数
    Java实现 LeetCode 386 字典序排数
    Java实现 LeetCode 385 迷你语法分析器
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/7530738.html
Copyright © 2020-2023  润新知