- 1
- 2
- 3
- 4
- 5
- 6
индокод:
#ifdef PRINT_DEBUG_INFO
#define DBG_PRINT if(1) printf
#else
#define DBG_PRINT if(0) printf
#endif
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+145.4
индокод:
#ifdef PRINT_DEBUG_INFO
#define DBG_PRINT if(1) printf
#else
#define DBG_PRINT if(0) printf
#endif
Индокод - макрос для вкл-выкл дебажной печати.
guest 06.04.2009 08:01 # +1
guest 08.04.2009 15:39 # 0
ну во-первых:
if (1) printf(...) - нахрена тут if (1) ? :)
во-вторых:
if (0) printf(...) - не проще было бы вообще убрать все это, поставив // ?
индус одним словом.
guest 21.04.2009 10:14 # 0
сам ты индус. макрос правильный. if-ы стоят, чтобы безопасно закомментировать код. потому что никакие // макросами не подставляются:
guest 11.10.2009 18:57 # 0
#include <stdio.h>
#define A //
#define B printf
int main()
{
A printf("A\n");
B("B\n");
return 0;
}
mini:~/Develop/crap$ g++ comment1.cpp
mini:~/Develop/crap$ ./a.out
A
B
mini:~/Develop/crap$
к этому
#define A /##/
guest 01.05.2009 21:32 # −1
#ifdef PRINT_DEBUG_INFO
#define DBG_PRINT printf
#else
#define DBG_PRINT
#endif
так проще
guest 14.07.2009 09:14 # 0
Да нормальный код
Попробуйте написать
DBG_PRINT("%d",i); j=12345;
В индусском коде все будет работать
В том варианте, где предлагается камменты впендюрить, вы будете долго-долго искать почему у вас интересное такое значение j получается при отладке и без нее разное (не надо разводить разговоры, что мол, нехорошо писать два оператора на одной строке - надо иметь защиту от идиотов, которые так делают)
В том варианте, где предлагается
#else
#define DBG_PRINT
#endif
получиться гавно с кучей ошибок-предупреждений при компиляции.
Сделать надо так
#ifdef PRINT_DEBUG_INFO
#define DBG_PRINT printf
#else
#define DBG_PRINT if(0) printf
#endif
умный компилер сам выкинет все после if(0)
guest 14.07.2009 20:53 # 0
хорош тем, что side-эффекты будут проявляться и в дебажном, и в недебажном билде.
2 old-гавнокодер: не стоит забывать, что в коде
#define DBG_PRINT //
сначала вырежутся комментарии, а уже потом сработает парсер макросов.
guest 13.08.2009 10:56 # 0
if (something_done)
DBG_PRINT("something done");
else
do_something();
превратится в
if (something)
if ( <0 или 1> ) printf("something done");
else
do_something();
Насколько я помню, else в таком случае привязывается к последнему if (это надо проверять, под рукой компилятора нет; нормальный компилятор по идее предупреждение должен выдать). Поэтому do_something() будет вызываться не тогда, когда надо.
guest 29.12.2009 14:00 # 0
#define DBG_PRINT if(PRINT_DEBUG_INFO) printf
?
guest 29.12.2009 14:02 # 0
guest 06.03.2010 23:53 # 0
помоему праильно...