第6章 語句
㈠ 簡單語句
⒈ 運算式語句(expression_r statement)
一個運算式加上結尾的分號,執行時導致該運算式被求值
⒉ 空語句(null statement)
只由一個單獨的分號組成,當文法上需要一個語句但邏輯上並不需要時使用
⒊ 聲明語句
用於聲明或定義對象或類
㈡ 複合陳述式
⒈ 複合陳述式(compound statement)又被稱為塊(block),是用一對花括弧{}括起的(可能為空白的)語句序列
⒉ 通常用於文法規則要求使用單個語句但程式邏輯需要多個語句時
⒊ 塊標示了一個範圍,在塊中引入的名字只能在其內部訪問
㈢ 控制流程語句
註:作為語句控制結構的一部分定義的變數,僅在該語句內可見
⒈ 條件分支結構
⑴ if 語句
關於 else-if 匹配的二義性問題:
else 匹配給最後出現尚未匹配的
if
⑵ switch 語句
① switch 在計算運算式的值後跳轉到匹配的標號處(無匹配則跳轉至
default),並從該點開始一直執行下去,
直至 switch 語句結束或遇到
break 語句
② switch 求解運算式的結果須為整型,每個
case 標號的值也須為各不相同的整型常量運算式
③ switch 內部的變數定義
· 可以在 switch 求解的運算式中定義和初始設定變數
· 為防止跳過變數定義,只允許在最後一個標號後定義變數
· 也可以引入塊語句,在其中定義變數
⒉ 迴圈
⑴ while 語句
註:迴圈條件中定義的變數在每次迴圈時都要經曆建立和撤銷的過程
⑵ for 迴圈語句
註:語句頭中的初始化語句、迴圈條件和運算式三者都可以省略
迴圈條件省略表示永遠為 true
⑶ do
while 語句
註:不能在迴圈條件中定義變數
⒊ break 語句
用於結束最近的外圍 while,
do while,
for 或
switch 語句,並在該語句後繼續執行
⒋ continue 語句
導致最近的外圍迴圈語句(for,
while, do
while)進行中的這次迭代提前結束
⒌ goto 語句
⑴ goto 語句提供了函數內部的無條件跳轉,實現從
goto 語句跳轉到同一函數內某個帶標號的語句
除非有足夠理由,應避免使用 goto 語句
⑵ 在任何語句前提供一個標識符和冒號,就得到一個帶標號的語句(labeled statement)
標識符: 語句
使用 goto 語句跳轉到該語句:
goto 標識符;
由於這裡的標識符只能用作 goto 的目標,因此可以與其它類型的標識符(如變數名)同名
⑶ goto 語句不能跨越變數的定義語句向前跳轉
若確實需在 goto 和跳轉目標位置間定義變數,則須定義在塊中
⒍ try,
catch 語句和 throw 運算式
用於異常處理
⒎ return 語句
用於結束當前函數,返回函數被調用處繼續執行
⒍⒕ 使用前置處理器進行調試
⒈ 使用 NDEBUG 預先處理變數實現有條件的調試代碼(類似標頭檔保護符)
#ifndef NDEBUG
#define NDEBUG
// 調試代碼
#endif
如果定義了 NDEBUG 就不執行調試代碼
⒉ 使用 NDEBUG 預先處理變數以及 assert 預先處理宏
定義在標頭檔cassert中,常用來檢查不可能發生的狀況,形式為
assert(運算式)
如果運算式結果為 false, assert 輸出資訊並終止程式
如果定義了 NDEBUG 預先處理變數,assert 將被忽略,不會產生任何運行時代價
⒊ 前置處理器定義了四種在調試時有用的常量
__FILE__ 檔案名稱
__LINE__ 當前行號
__TIME__ 編譯時間
__DATE__ 編譯日期