使用巨集的變長引數打LOG

2021-08-23 13:51:33 字數 495 閱讀 4978

單步除錯總有無法勝任的時候,通常我們會打log.如:

#ifdef _debug #define mylog(str) #else #define mylog(...) 0 #endif

vs2005的編譯器和gcc都支援巨集的變長引數.

vs2005的語法如下:

#ifdef debug #define perror(...) #else #define perror(...) 0 #endif

接著呼叫

perror("test");

輸出到stderr其實就是輸出到"輸出視窗",比寫到檔案裡方便多了.看這個:

gcc的方法如下(沒有經過測試):

#ifdef debug #define perror(args...) #else #define perror(...) 0 #endif

linux kernel中的變長引數巨集

1 函式宣告 首先,要實現類似printf 的變參函式,函式的最後乙個引數要用 表示,如 int log char arg1,這樣編譯器才能知道這個函式是變參函式。這個引數與變參函式的內部實現完全沒有關係,只是讓編譯器在編譯呼叫此類函式的語句時不計較引數多少老老實實地把全部引數壓棧而不報錯,當然.之...

使用巨集的可變引數來構造列印Log巨集

define test debug ifdef test debug define dbg err fmt,args printf fmt,file function line args endif void printf erro int a,int b else void main 測試結果 c...

Java可變長引數的使用

1.可變長引數在定義的時候只能放在方法的最後乙個引數位置,乙個方法只允許乙個可變長引數 2.可變長引數本質就是陣列,因此如下方式的定義是錯誤的 public class thinking public void test string p 3.呼叫的時候會優先選擇固定長度引數的方法,如下面 的輸出就...