我已經寫了一個調試宏,並希望在其中包含時間,在這種情況下,我的函數gettimestr()
接受一個小緩衝區(長度始終爲8,因爲其sprintf
填充到00:00:00
),並將其包含在fprintf
之內。我的宏如下所示:調試使用內存並釋放內存的宏?
#define _DEBUGPRINT(...) fprintf(stderr, __VA_ARGS__);
#ifndef NDEBUG
# define WHERESTR "[[%s] file %s, line %d]: "
# define WHEREARG timebufstr_0, __FILE__, __LINE__
# define DEBUGPRINT(_fmt, ...) \
char timebufstr_0[8]; \
gettimestr(timebufstr_0);\
_DEBUGPRINT(WHERESTR _fmt, WHEREARG, __VA_ARGS__)
#else
# define DEBUGPRINT(_fmt, ...) /**/
#endif
我第一次嘗試是有gettimestr
回報const char*
,但是這是很難的,所以我說幹就幹,使用的緩衝區,如果你能看到的可用內存。
不幸的是緩衝區不能被使用兩次(兩個DEBUGPRINTs會給出一個重新聲明錯誤)並且我相信它不會釋放內存,因爲它在主返回時會消失,因爲它不在函數中?
我的問題是:
- 我應該
malloc()
8個字節(或9,如果 爲\ 0,我不知道如果這是現在需要 )上,而不是[8]這樣我就可以 釋放它在堆中需求? - 我應該如何創建 緩衝區,銷燬引用,並在另一個宏調用中重用 以修復我的 問題,我無法將其稱爲 兩次?
嗯,準確,緩衝可能不會被釋放,但它可能會通過下一次調用被重用任何中途合理的編譯器。當函數退出時,緩衝區空間將被回收。 – 2011-03-21 11:49:56
這很好用,現在我寫了第一個有用的複雜宏! – 2011-03-21 12:36:36
有一點需要注意,在while(0);' – 2011-03-21 12:36:55