巧用 C語言 斷言機制助力程式debug

2021-07-05 19:40:30 字數 639 閱讀 1438

斷言可以對在系統中隱藏很深,用其它手段極難發現的問題進行定位,並且輸出資訊很詳細,可以很好地解決大多數c語言編譯器錯誤資訊輸出不詳細的問題。

斷言是對某種條件進行檢測,若條件成立則無反應,否則程式執行到斷言處終止,同時輸出為成立的條件。

assert是乙個巨集定義,並不是函式。

#include //assert所在標頭檔案

void main()

經常呼叫斷言,會極大地增加程式的開銷,可以通過以下方法使斷言機制,使只在debug下,使用斷言機制。

這種情況下,不要包含標頭檔案 assert.h

``#ifndef ndebug

#define assert(exp) ((void)0)#else#define assert(exp) (void)( (exp) || (_assert(#exp, __file__, __line__), 0) )

在沒有定義 ndebug下,assert被定義為 (void)0,無意義語句,而且對程式沒有什麼影響。

在定義ndebug時,斷言會輸出 不成立的條件 和 語句所在檔案和行,所以我們可以在debug時,在上述**之前,定義 ndebug ,在程式作為成品交出時, 刪除ndebug的巨集定義。

C語言斷言

斷言是對某種假設條件進行檢查 可理解為若條件成立則無動作,否則應報告 它可以快速發現並定位軟體問題,同時對系統錯誤進行自動報警。斷言可以對在系統中隱藏很深,用其它手段極難發現的問題進行定位,從而縮短軟體問題定位時間,提高系統的可測性。實際應用時,可根據具體情況靈活地設計斷言。原型定義 include...

C語言斷言

關於斷言的使用,從 林銳的 高質量 c程式設計指南 裡提取了一段斷言的使用規 則 程式一般分為 debug 版本和 release 版本,debug 版本用於內部除錯,release 版本發行給使用者使用。斷言 assert 是僅在 debug 版本起作用的巨集,它用於檢查 不應該 發生的情況。規則...

C語言斷言

斷言是對某種假設條件進行檢查 可理解為若條件成立則無動作,否則應報告 它可以快速發現並定位軟體問題,同時對系統錯誤進行自動報警。斷言可以對在系統中隱藏很深,用其它手段極難發現的問題進行定位,從而縮短軟體問題定位時間,提高系統的可測性。實際應用時,可根據具體情況靈活地設計斷言。原型定義 include...