C語言中goto 函式的使用場景

2021-10-01 23:49:54 字數 1588 閱讀 5658

對於goto函式,我們應該不陌生,但是由於這個函式的跳轉難以約束,容易破壞程式的結構,所以一般不推薦使用,但又由它的強大的跳轉功能在一些場景中的應用十分優秀,所以這個函式有了很大的存在價值,下面來談一談它的使用場景

檢視以下例子

int main(int argc, char* ar**)}}

loop_exit:

printf("這裡是loop標籤\r\n");

return 0;

}

對於以上的多重迴圈來說,直接跳出迴圈有4種方式:

if (i == 50 && j == 75)

int main(int argc, char* ar**)}}

}

for (size_t i = 0; i < 100; i++)

}if (i == 50 && j == 75)

}

對比以上四種跳出方式,我們發現,goto函式的語法更見簡單,而且邏輯性強

對於乙個程式如果有多個申請動態資源的變數。如果不恰當的檢查和釋放會導致程式的效率變低,程式變得臃腫如以下例子:

int *pstudent = null;

int *pteacher = null;

int *pschool = null;

pstudent = (int*)malloc(sizeof(int));

if (pstudent == null)

*pstudent = 0x1111111;

pteacher = (int*)malloc(sizeof(int));

if (pteacher == null)

return ‐1;

}*pteacher = 0x22222222;

pschool = (int*)malloc(sizeof(int));

if (pschool == null)

}else if (pteacher == null)

}return ‐1;

}

所需要的檢查變得格外的多,而是用goto函式,則會變的很好,通過goto進行統一的檢查和釋放

以下為乙個資源申請和釋放的模板

#include int main(int argc, char* ar**)

*pstudent = 0x1111111;

pteacher = (int*)malloc(sizeof(int));

if (pteacher == null)

*pteacher = 0x22222222;

pschool = (int*)malloc(sizeof(int));

if (pschool == null)

label_exit:

//統一的檢查和釋放

if (pschool != null)

if (pteacher != null)

if (pstudent != null)

return nret;

}

C語言中的goto

goto語句 goto語句也稱為無條件轉移語句,其一般格式如下 goto 語句標號 其中語句標號是按 識別符號規定書寫的符號,放在某一語句行的前面,標號後加冒號 語句標號起標識語句的作用,與goto 語句配合使用。如 label i loop while x 7 c語言不限制程式中使用標號的次數,但...

c語言中goto使用注意事項

在c語言中可以用goto來處理錯誤,但是要特別注意的是goto會順序執行下去,所以在goto中如果沒有分支或retun的話可能會出錯 include 氣泡排序,把陣列中的元素從大到小或從小到大列出 int main void int i,j,temp,count 0 goto out goto ou...

新人問題 C語言中goto的用法

如下 include include include int system const char string 清屏的函式宣告,包含在stdlib.h int main else if a long a 0 這裡用double型a減去強制轉換成整數的a判斷其是否為整數,如果為整數則輸出的結果用整數商...