DPRINT

Тема в разделе "LANGS.C", создана пользователем osox, 1 авг 2010.

  1. osox

    osox New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2009
    Сообщения:
    280
    сегодня поймал себя на бажном коде изначально
    код выглядел так
    Код (Text):
    1. if (...)
    2. {
    3.     //...
    4. }
    5. else
    6.     printf("fail")
    7.  
    8. closesocket //...
    потом есть у меня дефайн DPRINT решил отключить печать
    об ошибках написал так :)))
    Код (Text):
    1. if (...)
    2. {
    3.     //...
    4. }
    5. else
    6. #if DPRINT
    7.     printf("fail")
    8. #endif
    9.  
    10. closesocket //...
    ну как и следовало ожидать при включеной печати
    closesocket нормально вызывалась а при отключенной
    хендлы вообще не закрывались :)
    Код (Text):
    1. if (...)
    2. {
    3.     //...
    4. }
    5. else
    6. {
    7. #if DPRINT
    8.     printf ("fail")
    9. #endif
    10. }
    11.  
    12. closesocket //...
    в итоге пришлось часть else взять в свой блок :)
     
  2. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    Код (Text):
    1. int eprint(const char *format, ...)
    2. {
    3.     va_list args;
    4.     va_start( args, format );
    5.  
    6.     int done = 0;
    7.  
    8.   #ifdef DPRINT
    9.            done = vfprintf( stderr, format, args );
    10.   #endif
    11.  
    12.     va_end(args);
    13.  
    14.     return done;
    15. }
    Удобней что-то вроде этого заюзать.
     
  3. osox

    osox New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2009
    Сообщения:
    280
    или так
    Код (Text):
    1. #define DPRINT 1
    2.  
    3. #if DPRINT
    4. # define dprintf(fmt, ...) imp_dprintf(fmt, __VA_ARGS__)
    5. #else
    6. # define dprintf(fmt, ...)
    7. #endif
    8.  
    9. void imp_dprintf(const char *fmt, ...)
    10. {
    11.     va_list va;
    12.     char buff[512];
    13.     va_start(va, fmt);
    14.     buff[_countof(buff) - 1] = '\0';
    15.     _vsnprintf(buff, _countof(buff) - 1, fmt, va);
    16.     OutputDebugString(buff);
    17.     va_end(va);
    18. }
     
  4. osox

    osox New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2009
    Сообщения:
    280
    deLight
    ну выше плохо что он только под отладчиком печатать будет вот этот еще для трейса переделал немного

    Код (Text):
    1. #define TRACE 1
    2.  
    3. #if TRACE
    4. # define trace(fmt, ...) eprint(fmt, __VA_ARGS__)
    5. #else
    6. # define trace(fmt, ...)
    7. #endif
    8.  
    9. int eprint(const char *format, ...)
    10. {
    11.     int done = 0;
    12.     va_list args;
    13.     va_start( args, format );
    14.    
    15.     done = vfprintf(stderr, format, args);
    16.  
    17.     va_end(args);
    18.  
    19.     return done;
    20. }
    Код (Text):
    1. if (...)
    2. {
    3.     //...
    4. }
    5. else
    6.     trace("fail")
    7.  
    8. closesocket //...