сегодня поймал себя на бажном коде изначально код выглядел так Код (Text): if (...) { //... } else printf("fail") closesocket //... потом есть у меня дефайн DPRINT решил отключить печать об ошибках написал так )) Код (Text): if (...) { //... } else #if DPRINT printf("fail") #endif closesocket //... ну как и следовало ожидать при включеной печати closesocket нормально вызывалась а при отключенной хендлы вообще не закрывались Код (Text): if (...) { //... } else { #if DPRINT printf ("fail") #endif } closesocket //... в итоге пришлось часть else взять в свой блок
Код (Text): int eprint(const char *format, ...) { va_list args; va_start( args, format ); int done = 0; #ifdef DPRINT done = vfprintf( stderr, format, args ); #endif va_end(args); return done; } Удобней что-то вроде этого заюзать.
или так Код (Text): #define DPRINT 1 #if DPRINT # define dprintf(fmt, ...) imp_dprintf(fmt, __VA_ARGS__) #else # define dprintf(fmt, ...) #endif void imp_dprintf(const char *fmt, ...) { va_list va; char buff[512]; va_start(va, fmt); buff[_countof(buff) - 1] = '\0'; _vsnprintf(buff, _countof(buff) - 1, fmt, va); OutputDebugString(buff); va_end(va); }
deLight ну выше плохо что он только под отладчиком печатать будет вот этот еще для трейса переделал немного Код (Text): #define TRACE 1 #if TRACE # define trace(fmt, ...) eprint(fmt, __VA_ARGS__) #else # define trace(fmt, ...) #endif int eprint(const char *format, ...) { int done = 0; va_list args; va_start( args, format ); done = vfprintf(stderr, format, args); va_end(args); return done; } Код (Text): if (...) { //... } else trace("fail") closesocket //...