C++流程掌握頂用於跳轉的return和goto語句進修教程。本站提示廣大學習愛好者:(C++流程掌握頂用於跳轉的return和goto語句進修教程)文章只能為提供參考,不一定能成為您想要的結果。以下是C++流程掌握頂用於跳轉的return和goto語句進修教程正文
return 語句
終止函數的履行並前往對換用函數的掌握(或對操作體系的掌握,假如您從 main 函數轉移掌握)。緊接在挪用以後在挪用函數中恢復履行。
語法
return [expression];
備注
expression 子句(假如存在)將轉換為函數聲明中指定的類型,就像正在履行初始化一樣。從該類型的表達式到 return 類型的函數的轉換會創立暫時對象。
expression 子句的值將前往挪用函數。假如省略該表達式,則函數的前往值是不肯定的。結構函數和析構函數和類型為 void的函數沒法在 return 語句中指定表達式。一切其他類型的函數必需在 return 語句中指定表達式。
當掌握流加入關閉函數界說的塊時,成果將與履行不帶表達式的 return 語句所取得的成果一樣。這關於聲明為前往值的函數有效。
一個函數可以包括隨意率性數目的 return 語句。
以下示例將一個表達式與 return 語句一路應用來獲得兩個整數中的最年夜者。
// return_statement2.cpp #include <stdio.h> int max ( int a, int b ) { return ( a > b ? a : b ); } int main() { int nOne = 5; int nTwo = 7; printf_s("\n%d is bigger\n", max( nOne, nTwo )); }
goto 語句
goto 語句無前提地將掌握權轉移給由指定的標識符標志的語句。
語法
goto identifier;
備注
由 identifier 指定的標志語句必需位於以後函數中。一切 identifier 稱號都是外部定名空間的成員,是以不會攪擾其他標識符。
語句標簽僅對 goto 語句成心義;其它情形下,語句標簽將被疏忽。不克不及從新聲明標簽。
盡量應用 break、continue 和 return 語句而不是 goto 語句是一種好的編程作風。然則,由於 break 語句僅加入輪回的一個級別,所以能夠必需應用 goto 語句加入深度嵌套的輪回。
在此示例中,當 i 等於 3 時,goto 語句將掌握權轉移給標志為 stop 的點。
// goto_statement.cpp #include <stdio.h> int main() { int i, j; for ( i = 0; i < 10; i++ ) { printf_s( "Outer loop executing. i = %d\n", i ); for ( j = 0; j < 2; j++ ) { printf_s( " Inner loop executing. j = %d\n", j ); if ( i == 3 ) goto stop; } } // This message does not print: printf_s( "Loop exited. i = %d\n", i ); stop: printf_s( "Jumped to stop. i = %d\n", i ); }
輸入:
正在履行內部輪回。i = 0 正在履行外部輪回。j = 0 正在履行外部輪回。j = 1 正在履行內部輪回。i = 1 正在履行外部輪回。j = 0 正在履行外部輪回。j = 1 正在履行內部輪回。i = 2 正在履行外部輪回。j = 0 正在履行外部輪回。j = 1 正在履行內部輪回。i = 3 正在履行外部輪回。j = 0 跳轉以停滯。i = 3
掌握的轉移
可以在 goto 語句中應用 語句或 switchcase 標簽來指定分支超越初始值設定項的法式。此類代碼長短法的,除非包括初始值設定項的聲明在跳轉語句產生的塊所關閉的塊中。
上面的示例顯示了聲明和初始化對象 total、ch 和 i 的輪回。也存在將掌握權傳遞過初始值設定項的毛病 goto 語句。
// transfers_of_control.cpp // compile with: /W1 // Read input until a nonnumeric character is entered. int main() { char MyArray[5] = {'2','2','a','c'}; int i = 0; while( 1 ) { int total = 0; char ch = MyArray[i++]; if ( ch >= '0' && ch <= '9' ) { goto Label1; int i = ch - '0'; Label1: total += i; // C4700: transfers past initialization of i. } // i would be destroyed here if goto error were not present else // Break statement transfers control out of loop, // destroying total and ch. break; } }
在後面的示例中,goto 語句測驗考試將掌握權傳遞過 i 的初始化。然則,假如已聲明但未初始化 i,則該傳遞是正當的。
在用作 total 語句的 chstatement 的塊中聲明的對象 和 while 在應用 break 語句加入此塊時將被燒毀。