/* 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; }