除錯技巧 巨集列印開關

2021-08-17 10:35:05 字數 1118 閱讀 7242

在**除錯過程中,或多或少會新增printf()函式輸出除錯資訊來協助**地除錯工作。但當**除錯ok進入發布階段時,將printf()都注釋會造成**混亂不符合程式設計規範,將其刪除又會帶來後續除錯地不便。所以很多人採用了,

巨集定義的方式來輸出除錯語句。

常見地巨集定義列印開關如下:

#ifdef __debug

#define debug(info) printf(info)

#else

#define debug(info)

#endif

這次方便多了,一條語句就可以了~~~ 但是,問題也隨之而來了,printf是支援多個引數的,而且是不定引數,當你使用下面這樣的語句時就會報錯:

debug("%s",msg)

這是因為,debug(info)這條巨集定義只支援乙個引數的替換。

因此,我們希望debug能夠像printf那樣,支援多個引數,並且這些引數剛好展開成為printf語句本身使用的引數,譬如:我們希望debug("%s",msg)能夠展開為printf("%s",msg)。

改進地巨集定義列印開關如下:

#define __debug__

#ifdef __debug__

#define dprinf(...) printf(__va_args__) ///巨集列印函式定義

#else

#define dprinf(...)

#endif

用可變引數巨集(variadic macros)傳遞可變參數列。

#include #include #define __debug__

#ifdef __debug__

#define dprintf(...) printf(__va_args__) ///巨集列印函式定義

#else

#define dprintf(...)

#endif

int addint(int dataa, int datab)

void main()

除錯技巧 巨集定義開關和printf

printf 的巨集定義版本 前言 我們在寫程式的時候,總是或多或少會加入一些printf之類的語句用於輸出除錯資訊,但是printf語句有個很不方便的地方就是當我們需要發布程式的時候要一條一條的把這些語句刪除,而一旦需要再次除錯的時候,這些語句又不得不一條條的加上,這給我們帶來了很大的不便,浪費了...

printf 巨集 除錯技巧

printf除錯是嵌入式除錯的基本手段,而且是非常重要的手段,我認為相比單步除錯更加有用有效,特別是微控制器之後跑系統,單步除錯效率更加低下了,我們在工作遇到bug的時候,我們第一時間就想知道那些該死的日誌有沒有儲存下來,這樣好讓我們程式設計師裝逼一波把問題解決。printf巨集定義除錯非常重要,有...

Linux printf 巨集 除錯技巧

printf除錯是嵌入式除錯的基本手段,而且是非常重要的手段,我認為相比單步除錯更加有用有效,特別是微控制器之後跑系統,單步除錯效率更加低下了,我們在工作遇到bug的時候,我們第一時間就想知道那些該死的日誌有沒有儲存下來,這樣好讓我們程式設計師裝逼一波把問題解決。printf巨集定義除錯非常重要,有...