C语言 goto语句

摘要:
/*转到语句*/#include #include #include<string h>/*goto语句也称为无条件转换语句,其一般格式如下:goto语句标签;语句标签是根据标识符的规定编写的符号,置于句子行前面,后跟冒号(:)。语句标签用于标识语句,并与goto语句一起使用*//*“然而,在结构化程序设计中,通常不建议使用goto语句,以避免程序流程的混乱以及理解和调试程序的困难。然而,goto有其自身的局限性,只能是当前函数。
/* goto语句 */
#include <stdio.h> 
#include <stdlib.h>
#include <string.h>

/*
goto语句也称为无条件转移语句,其一般格式如下: goto 语句标号; 其中语句标号是按标识符规定书写的符号, 
放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto 语句配合使用。

*/

/*
"但是,在结构化程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。"
所有goto说明都有类似提示,但是个人感觉goto还是很有用的

*/

int handle(int num)
{
    return num;
}

//goto基本用法
void test1()
{
    int errCode = 0;

    //业务1
    errCode = handle(1);
    if (errCode)
    {
        goto err;
    }

    //业务2
    errCode = handle(1);
    if (errCode)
    {
        goto err;
    }

    printf("-----ok----
");

    return;
err:
    //资源释放处理
    printf("program is error .
");
}

/*
goto作用域说明
标签本身没有作用域的,只是一个标志点。
但是goto本身有限制,只能是当前函数。所以,从这个角度来说,标签的作用域也可以说是当前函数。
*/
void test2()
{
     int errCode = 0;

     errCode = handle(1);
     if (errCode)
     {
         //goto err;   error C2094: 标签“err”未定义
     }
}

int main()
{
    test2();
    printf("-----ok------
");
    getchar();
    return 0;
}
/* do{ ... }while(false)妙用  */
#include <stdio.h> 
#include <stdlib.h>
#include <string.h>

/*
goto在函数有多个返回分支,部分或全部返回分支返回前需要做一些额外的工作(如释放内存等)场景很有作用
但是goto是跳转,在c++编程中,如果变量定义在goto语句后面就会报错(变量未定义)
do{ ... }while(false)就是一种取代goto的方法

*/

int handle(int num)
{
    return num;
}

//do while 使用
int test1()
{
    int errCode = 0;

    do 
    {
        //业务1
        errCode = handle(1);
        if (errCode)
        {
            break;
        }

        //业务2
        errCode = handle(1);
        if (errCode)
        {
            break;
        }

        //做需要执行的操作

    } while (0);

    //资源释放处理

    return errCode;

}

int main()
{
    test1();
    printf("-----ok------
");
    getchar();
    return 0;
}

免责声明:文章转载自《C语言 goto语句》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇自媒体新人常见问题汇总-千氪经验:FatFs文件系统实时写入下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C语言之生产者与消费者模型

多线程并发应用程序有一个经典的模型,即生产者/消费者模型。系统中,产生消息的是生产者,处理消息的是消费者,消费者和生产者通过一个缓冲区进行消息传递。生产者产生消息后提交到缓冲区,然后通知消费者可以从中取出消息进行处理。消费者处理完信息后,通知生产者可以继续提供消息。 要实现这个模型,关键在于消费者和生产者这两个线程进行同步。也就是说:只有缓冲区中有消息时,...

C语言 锁的使用总结

1. C 互斥锁 mutex初始化与去初始化 #include <pthread.h>int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);int pthread_mutex_destroy(pthread_mutex_t *mutex);...

C语言中宏的作用

在C语言#define机制中包括了一个规定,与允许把参数替换到文本中,这种实现通常称为宏或宏定义。下面是宏的声明方式: #define name(parameter-list) stuff 其中 parameter-list的左括号必须与name紧邻,如果中间有空白,parameter-list就会被解释为stuff的一部分。 宏的作用 1.替换作用:在程...

C语言编程基础

主流C语言编译器介绍 关于GNU规范的语法扩展 用C语言构建一个可执行程序的流程 宏定义(无参宏定义和带参宏定义),C语言宏定义详解 条件编译,C语言条件编译详解 原码、反码、补码及位操作符,C语言位操作 预定义宏,C语言预定义的宏详解 C语言#include的用法 C语言宏的定义和宏的使用方法(#define) C语言条件编译(#if,#ifdef,#...

使用c语言和GMP库实现伪随机算法笔记

步骤一:安装GMP库,两种方法选其一既可 1.使用源码安装方式: 2.使用在线安装的方式: 步骤二:使用GMP库随机生成一个大数,样本代码如下: 步骤三:使用GMP库随机生成一个大数,并判断生成的大数是不是素数,样本代码如下: 步骤四:根据生成的大素数,产生下一个大素数,样本代码如下: 步骤五:根据随机产生的大素数和随机数,使用BlumBlumShus算...

C语言分配4k对齐内存

分配内存,按4k字节对齐。亦即分配的内存指针指向的地址,低12位(二进制)均为0。 假设要分配size字节内存。基本思路就是先分配size+4k-1字节的内存,然后在起始的4k字节里,找到4k对齐的那个地址(即低12位为0),作为对齐内存首地址,返回。 当然为了避免内存泄漏,要保留初始分配的内存地址,在使用完内存后,需要free掉分配的所有内存。 #inc...