2013-05-27 30 views
1

我在每個函數的開頭都看到過這樣的代碼:打印函數名稱和每個參數名稱和值,以幫助記錄和調試目的。我想知道是否有這個自動化。例如,在下面的代碼中,有可能用一些宏或其他工具替換(... "%d, %d", x, y)?非常感謝。如何自動派生具有類型和值的函數參數?

void foo(int x, int y) 
{ 
    trace(__FUNCTION__, "%d, %d", x, y); 
    ... 
} 

回答

0

如果有一些__args__變量/宏,這可能是可能的。但是,C或C++標準中沒有這樣的事情,無論您選擇哪種規範。你可以在這裏做,以節省一些打字的唯一的事情就是通過定義這樣一個(C99 +或C++ 11 +),宏擺脫__FUNCTION__

#define TRACE(fmt, ...) trace(__FUNCTION__, fmt, __VA_ARGS__); 

不幸的是,沒有訣竅讓你得到參數名稱和值,而不是將它們逐一提供給traceTRACE,至少不在任何現有的C或C++標準中。有一天可能會有一些反射特性用C++來實現,但您至少需要等待幾年。

相關問題