2006/04/26

가변 인자를 가지는 매크로 만들기

잊어먹기 전에 정리하기!!

ANSI C버전 ==============================================
#include
#include
/>#define ERR_FUNC(fmt, args...) \
err_func(__FILE__, __LINE__, fmt, ## args)
/>void err_func(const char *, const int, char *, ...);

void err_func(const char *name, const int line, char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
fprintf(stderr, "Error in %s, line %i:", name, line);
vfprintf(stderr, fmt, ap);
va_end(ap);
}
/>int main()
{
ERR_FUNC("value=%d",12);
}


GCC버전 ==============================================
#include
#include
/>#define ERR_FUNC(fmt, args...) \
err_func(__FILE__, __FUNCTION__, __LINE__, fmt, ## args)
/>void err_func(const char *, const char *, const int, char *, ...)
__attribute__ ((format (printf, 4, 5))) /* See note below */
;
/>void err_func(const char *name, const char *func, const int line, char *fmt, ...)
{
va_list ap;
/> va_start(ap, fmt);
fprintf(stderr, "Error in %s, line %i, in %s():", name, line, func);
vfprintf(stderr, fmt, ap);
va_end(ap);
}
/>int main()
{
ERR_FUNC("value=%d",12);
}

댓글 없음: