預處理功能除錯 assert和NDEBUG

2021-10-20 07:34:11 字數 659 閱讀 1186

標頭檔案#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 ...