對於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判斷其是否為整數,如果為整數則輸出的結果用整數商...