디버깅 매크로를 작성했고 그 안에 시간을 포함하기를 원합니다.이 경우 함수 내 gettimestr()
은 sprintf
패드가 00:00:00
으로 패드되어 있기 때문에 작은 버퍼 (길이가 항상 8입니다)를 허용하고 그 안에 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*
을 가지고 있었다,하지만 그건 내가 나서서 당신이 볼 수있는 경우 버퍼를 사용의 메모리를 하드입니다.
불행히도 버퍼는 두 번 사용할 수 없습니다 (두 개의 디버그 오류는 다시 선언 오류를 발생시킬 것입니다) 또한 함수에서와 같이 기본 반환시 사라질 것이기 때문에 메모리를 확보하지 못할 것이라고 생각합니다.
내 질문은 : 대신 [8] 그래서 나는 할 수 무료 그것을
- 내가
malloc()
8 바이트 (즉 지금 필요한 경우 또는 9 \ 0 경우, 내가 모르고 오전)해야 힙의 수요? - 어떻게는 버퍼를 생성 참조를 파괴하고, 내가 두 번 호출 할 수있는 곳 내 문제를 해결하기 위해 다른 매크로 호출 재사용 할 수 있어야한다?
음, 정확, 버퍼 아마 해제되지 않을 것이다, 그러나 아마로 다음의 호출에 의해 다시 사용됩니다 : 더블 정의의 문제를 overcomming의 경우, 예를 들어,
{}
로 묶어야 할 수 있습니다 중도 합리적인 컴파일러. 버퍼 공간은 함수가 종료 될 때 재 확보됩니다. –이것은 훌륭하게 작동하며, 이제는 첫 번째 유용한 매크로를 작성했습니다. –
한 메모, 앞에 닫는 괄호를 넣는 것을 잊었습니다.} while (0); ' –