C語言 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----\n");

    return;
err:
    //資源釋放處理
    printf("program is error .\n");
}

/*
goto做用域說明
標籤自己沒有做用域的,只是一個標誌點。 可是goto自己有限制,只能是當前函數。因此,從這個角度來講,標籤的做用域也能夠說是當前函數。 */
void test2()
{
     int errCode = 0;

     errCode = handle(1);
     if (errCode)
     {
         //goto err;   error C2094: 標籤「err」未定義
     }
}

int main()
{
    test2();
    printf("-----ok------\n");
    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------\n");
    getchar();
    return 0;
}
相關文章
相關標籤/搜索