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 語句加入此塊時將被燒毀。