詳解C++編程中標(biāo)記語(yǔ)句與復(fù)合語(yǔ)句的寫(xiě)法
標(biāo)記語(yǔ)句
標(biāo)簽用于將程序控制權(quán)直接轉(zhuǎn)交給特定語(yǔ)句。
identifier : statement case constant-expression : statement default : statement
備注
有三種標(biāo)記語(yǔ)句。它們?nèi)际褂妹疤?hào)將某種標(biāo)簽與語(yǔ)句隔開(kāi)。case 和 default 標(biāo)簽特定于 case 語(yǔ)句。
#include <iostream> using namespace std; void test_label(int x) { if (x == 1){ goto label1; } goto label2; label1: cout << "in label1" << endl; return; label2: cout << "in label2" << endl; return; } int main() { test_label(1); // in label1 test_label(2); // in label2 }
goto 語(yǔ)句
源程序中 identifier 標(biāo)簽的外觀聲明了一個(gè)標(biāo)簽。僅 goto 語(yǔ)句可將控制轉(zhuǎn)移到 identifier 標(biāo)簽。以下代碼片段闡釋了 goto 語(yǔ)句和 identifier 標(biāo)簽的使用:
標(biāo)簽無(wú)法獨(dú)立出現(xiàn),必須總是附加到語(yǔ)句。如果標(biāo)簽需要獨(dú)立出現(xiàn),則必須在標(biāo)簽后放置一個(gè) null 語(yǔ)句。
標(biāo)簽具有函數(shù)范圍,并且不能在函數(shù)中重新聲明。但是,相同的名稱(chēng)可用作不同函數(shù)中的標(biāo)簽。
// labels_with_goto.cpp // compile with: /EHsc #include <iostream> int main() { using namespace std; goto Test2; cout << "testing" << endl; Test2: cerr << "At Test2 label." << endl; } //Output: At Test2 label.
case 語(yǔ)句
在 case 關(guān)鍵字后顯示的標(biāo)簽不能在 switch 語(yǔ)句的外部顯示。(此限制也適用于 default 關(guān)鍵字。) 下面的代碼片段演示了 case 標(biāo)簽的正確用法:
// Sample Microsoft Windows message processing loop. switch( msg ) { case WM_TIMER: // Process timer event. SetClassWord( hWnd, GCW_HICON, ahIcon[nIcon++] ); ShowWindow( hWnd, SW_SHOWNA ); nIcon %= 14; Yield(); break; case WM_PAINT: memset( &ps, 0x00, sizeof(PAINTSTRUCT) ); hDC = BeginPaint( hWnd, &ps ); EndPaint( hWnd, &ps ); break; default: // This choice is taken for all messages not specifically // covered by a case statement. return DefWindowProc( hWnd, Message, wParam, lParam ); break; }
case 語(yǔ)句中的標(biāo)簽
在 case 關(guān)鍵字后顯示的標(biāo)簽不能在 switch 語(yǔ)句的外部顯示。(此限制也適用于 default 關(guān)鍵字。) 下面的代碼片段演示了 case 標(biāo)簽的正確用法:
// Sample Microsoft Windows message processing loop. switch( msg ) { case WM_TIMER: // Process timer event. SetClassWord( hWnd, GCW_HICON, ahIcon[nIcon++] ); ShowWindow( hWnd, SW_SHOWNA ); nIcon %= 14; Yield(); break; case WM_PAINT: // Obtain a handle to the device context. // BeginPaint will send WM_ERASEBKGND if appropriate. memset( &ps, 0x00, sizeof(PAINTSTRUCT) ); hDC = BeginPaint( hWnd, &ps ); // Inform Windows that painting is complete. EndPaint( hWnd, &ps ); break; case WM_CLOSE: // Close this window and all child windows. KillTimer( hWnd, TIMER1 ); DestroyWindow( hWnd ); if ( hWnd == hWndMain ) PostQuitMessage( 0 ); // Quit the application. break; default: // This choice is taken for all messages not specifically // covered by a case statement. return DefWindowProc( hWnd, Message, wParam, lParam ); break; }
goto 語(yǔ)句中的標(biāo)簽
源程序中 identifier 標(biāo)簽的外觀聲明了一個(gè)標(biāo)簽。僅 goto 語(yǔ)句可將控制轉(zhuǎn)移到 identifier 標(biāo)簽。以下代碼片段闡釋了 goto 語(yǔ)句和 identifier 標(biāo)簽的使用:
標(biāo)簽無(wú)法獨(dú)立出現(xiàn),必須總是附加到語(yǔ)句。如果標(biāo)簽需要獨(dú)立出現(xiàn),則必須在標(biāo)簽后放置一個(gè) null 語(yǔ)句。
標(biāo)簽具有函數(shù)范圍,并且不能在函數(shù)中重新聲明。但是,相同的名稱(chēng)可用作不同函數(shù)中的標(biāo)簽。
// labels_with_goto.cpp // compile with: /EHsc #include <iostream> int main() { using namespace std; goto Test2; cout << "testing" << endl; Test2: cerr << "At Test2 label." << endl; // At Test2 label. }
復(fù)合語(yǔ)句(塊)
復(fù)合語(yǔ)句包含封閉在大括號(hào) ({ }) 中的零個(gè)或多個(gè)語(yǔ)句。可以在任何期望語(yǔ)句出現(xiàn)的位置使用復(fù)合語(yǔ)句。復(fù)合語(yǔ)句通常稱(chēng)為“塊”。
語(yǔ)法
{ [ statement-list ] }
備注
以下示例使用復(fù)合語(yǔ)句作為 if 語(yǔ)句的 statement 部分(有關(guān)語(yǔ)法的詳細(xì)信息,請(qǐng)參閱 if 語(yǔ)句):
if( Amount > 100 ) { cout << "Amount was too large to handle\n"; Alert(); } else Balance -= Amount;
注意
由于聲明是一個(gè)語(yǔ)句,因此聲明可以是 statement-list 內(nèi)的某個(gè)語(yǔ)句。因此,復(fù)合語(yǔ)句內(nèi)聲明的名稱(chēng)(而不是顯式聲明為靜態(tài)的名稱(chēng))具有局部范圍和(對(duì)于對(duì)象)生存期。
相關(guān)文章
c語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列詳解(Stack&Queue)
這篇文章主要介紹了c語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列詳解(Stack&Queue),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08基于curses庫(kù)實(shí)現(xiàn)彈球游戲
這篇文章主要為大家詳細(xì)介紹了基于curses庫(kù)實(shí)現(xiàn)彈球游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03詳解C++編程中的主表達(dá)式與后綴表達(dá)式編寫(xiě)基礎(chǔ)
這篇文章主要介紹了C++編程中的主表達(dá)式與后綴表達(dá)式編寫(xiě)基礎(chǔ),是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-01-01C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法之時(shí)間空間復(fù)雜度入門(mén)
這篇文章主要為大家介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法之時(shí)間空間復(fù)雜度的入門(mén)教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02C語(yǔ)言實(shí)現(xiàn)常用字符串庫(kù)函數(shù)(推薦)
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)常用字符串庫(kù)函數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11OpenCV利用K-means實(shí)現(xiàn)根據(jù)顏色進(jìn)行圖像分割
K-means是一種經(jīng)典的無(wú)監(jiān)督聚類(lèi)算法---不需要人工干預(yù)。本文將通過(guò)K-means算法實(shí)現(xiàn)根據(jù)顏色進(jìn)行圖像分割的效果,感興趣的小伙伴可以嘗試一下2022-10-10C語(yǔ)言基本排序算法之插入排序與直接選擇排序?qū)崿F(xiàn)方法
這篇文章主要介紹了C語(yǔ)言基本排序算法之插入排序與直接選擇排序?qū)崿F(xiàn)方法,結(jié)合具體實(shí)例形式分析了插入排序與直接選擇排序的定義、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-09-09C語(yǔ)言基礎(chǔ)知識(shí)點(diǎn)指針的使用
這篇文章主要介紹了C語(yǔ)言基礎(chǔ)知識(shí)點(diǎn)指針的使用,下面文章將讓我們掌握指針的概念和用法、指針與數(shù)組之間的關(guān)系、指針指向的指針、如何使用指針變量做函數(shù)參數(shù)等更多相關(guān)內(nèi)容,需要的小伙伴可以參考一下2022-03-03