ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
11 июля
373541 Топик полностью
fk0, легенда (03.12.2012 19:35 - 19:45, просмотров: 104) ответил MegaJohn на как правильно заккоментить функцию с переменным количеством параметров ?
Показываю (закрыть глаза и не смотреть, ацкий говнокод). (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]