2013-08-26 3 views
0

может ли кто-нибудь объяснить мне, почему MAC-файлы DEBUG предпочтительнее, чем опция WRITE ??? Можете ли вы также показать mw полный пример для ПОДГОТОВКИ К ДЕБУДИРОВАНИЮ. (DEBUG MACROS)? Как DEBUG MACROS отлаживают наши программы?Макросы для режимов отладки и выпуска

+4

Где вы видели макрос DEBUG? У вас есть пример? Кроме того, что такое опция WRITE? –

+0

Я имею в виду WRITE, что мы используем printf или cout для проверки значений наших переменных во избежание ошибок. – ProDev7

+0

Я не думаю, что вы можете сказать, что макрос DEBUG предпочтительнее использовать 'printf()', потому что они часто используются вместе. –

ответ

3

Отладочные макросы не «отлаживают программы», но обеспечивают возможность отладки программы.

Это может быть дополнительная проверка.

#ifdef DEBUG 
#define CHECK_NON_ZERO(x) if (x == 0) cout << "Error, should be zero!\n"; 
#else 
#define CHECK_NON_ZERO(x) 
#endif 

float func(int x) 
{ 
    CHECK_NON_ZERO(x); 

    return 1.0f/x; 
} 

Очевидно, что как только вы сделали свое тестирование кода, в сборке релиза, вы, вероятно, не хотите иметь дополнительные проверки, которые x ненулевые, так что вы не имеете дополнительные проверить.

+0

ok Я получил его. но почему вы пишите #ifdef DEBUG ?? вы имеете в виду режим DEBUG? или любое слово вместо DEBUG вы могли бы использовать ???? – ProDev7

+0

Я имею в виду в построении отладки, но в разных средах есть разные способы сказать «сборка отладки», и вы, конечно, можете иметь свой собственный '#ifdef MY_DEBUG' и использовать' -DMY_DEBUG' в качестве опции для компилятора, когда хотите включите это. Это не вопрос моего поста »- дело в том, что SOMETIMES у вас есть код, который имеет смысл только при разработке программного обеспечения. Ясно, что вызов этой функции с нулевым значением приведет к плохим результатам, поэтому хорошо проверить ее. Но «хороший код» не должен называть эту функцию нулевым, в первую очередь, поэтому нет необходимости тестировать ее в выпуске. –

+0

Я назвал эту функцию нулевой, но она не печатала ошибку, которую вы написали. – ProDev7

1

Существует старый добрый утвердитель (...). Быть noop, если NDEBUG определен, но проверка, если NDEBUG не определен.

К слову: отладочные макросы не отлаживают, просто регистрируют информацию.

+0

ОК спасибо. понятно теперь – ProDev7