Показываю (закрыть глаза и не смотреть, ацкий говнокод). (C) fk0@fk0.name, запатентовано, закопирайчено, воспроизведение запрещено, копирование запрещено, в т.ч. методом в мозг через глаз.
#ifdef NO_LOG /* print to stderr instead of logging */
#if defined(__STDC_VERSION__) /* C99 compiler */
#define writelog(flags, ...) do { \
fprintf(stderr, __VA_ARGS__); \
fputc('\n', stderr); \
} while(0)
#else /* C89 compiler */
#define writelog if (0) printf
#endif
#else /* NO_LOG -- logging enabled */
#if defined(__STDC_VERSION__) /* C99 compiler */
void _writelog(uint_fast8_t flags, const char *mname, \
unsigned line, const char *fmt, ...);
#define writelog(flags, ...) _writelog(flags, \
__FILE__, __LINE__, __VA_ARGS__)
#else /* C89 compiler */
#define writelog _log_name=__FILE__, _log_line=__LINE__, _writelog
void _writelog(uint_fast8_t flags, const char *fmt, ...);
extern const char *NEAR _log_name;
extern unsigned NEAR _log_line;
#endif /* C89 */
#endif /* NO_LOG */
#ifndef DEBUGMSG /* debugging disabled */
#if defined(__STDC_VERSION__) /* C99 compiler */
#define DEBUG(...)
#else /* C89 compiler */
#define DEBUG if (0) printf
#endif
#else /* debugging enabled */
#if defined(__STDC_VERSION__) /* C99 compiler */
#define DEBUG(...) writelog(LOG_DEBUG, __VA_ARGS__)
#else /* C89 doesn't support variable arguments list for macro */
void _log_debug(const char *fmt, ...);
#define DEBUG _log_name=__FILE__, _log_line=__LINE__, _log_debug
#endif
#endif /* defined(DEBUGMSG) */
Из C файла:
#ifndef __STDC_VERSION__ /* C89 compiler */
static void vwlog(uint_fast8_t flags, const char *mname, unsigned line, const char *fmt, va_list args)
#else /* C99 compiler */
void _writelog(uint_fast8_t flags, const char *mname, unsigned line, const char *fmt, ...)
#endif
{
PSTATIC char mf[16];
#ifdef __STDC_VERSION__ /* C99 compiler */
va_list args;
va_start(args, fmt);
#endif
....
/* 3. message */
vformat(fmt, args);
#ifdef SYSLOG
syslog_end();
#endif
logeol();
#ifdef __STDC_VERSION__ /* C99 compiler */
va_end(args);
#endif
}
#ifndef __STDC_VERSION__ /* C89 compiler */
/* вывод сообщения с приоритетом `flags' */
void _writelog(uint_fast8_t flags, const char *fmt, ...)
{
PSTATIC va_list args;
va_start(args, fmt);
vwlog(flags, _log_name, _log_line, fmt, args);
va_end(args);
}
void _log_debug(const char *fmt, ...)
{
PSTATIC va_list args;
va_start(args, fmt);
vwlog(LOG_DEBUG, _log_name, _log_line, fmt, args);
va_end(args);
}
#endif
[ZX]
-
- "перед прочтением сжечь"(с) - argus98(07.12.2012 16:21)
- брррр, показали проще #if 1 #define LOG(x) (x) #else #define LOG(x). LOG( dprintf( "...", ... ); ) - MegaJohn(07.12.2012 15:24)