標頭檔案#include
assert是一種預處理巨集(preprocessor macro),使用乙個表示式作為其條件。
assert
(expr)
;
assert有一點像是關卡,檢查每個途徑這個關卡的程式流的身份(expr),守城的人拿起來你的id一看,滿足就放行,不滿足則報警終止程式執行。預設情況下,assert啟用,你可以通過以下兩種情況使其失效:
總的來說,assert應該用在確實不可能發生的情況,僅用於除錯,不用於代替執行時邏輯檢查。當然ndebug巨集還可以用於定義除錯時才執行的**:
#ifndef ndebug
//有點繞,如果沒有定義不除錯,那就是除錯
//我想要在除錯時執行的**
#endif
在沒有定義不除錯(也就是除錯)時,我們可以列印一些資訊:__func__
__file__
__time__
__date__
(不用數了是雙下劃線)。可以通過cerr輸出這些字面值常量。
他人提供的assert使用經驗:
用斷言的幾個原則:
[1]
預處理的功能
1.預處理功能是 語言特有的功能,它是在對源程式正式編譯前由預處理程式完成的。程式設計師在程式中用預處理命令來呼叫這些功能。2.巨集定義是用乙個識別符號來表示乙個字串,這個字串可以是常量 變數或表示式。在巨集呼叫中將用該字串代換巨集名。3.巨集定義可以帶有引數,巨集呼叫時是以實參代換形參。而不是 值...
c 預處理和預處理命令
預處理發生在編譯之前,預處理輸出的是乙個單一的檔案,這個檔案被送到編譯器,進行編譯。每條預處理命令都控制預處理器的行為。每條預處理命令佔據一行,有以下的格式 character 預處理命令 one of define,undef,include,if,ifdef,ifndef,else,elif,e...
使用預處理器進行除錯
c 程式設計師有時也會使用類似的技術有條件地執行用於除錯的 這種想法是 程式所 包含的除錯 僅在開發過程中執行。當應用程式已經完成,並且準備提交時,就會將除錯 關閉。可使用 ndebug 預處理變數實現有條件的除錯 int main ifndef ndebug cerr starting main ...