2013-08-26 72 views
0

任何人都可以向我解释为什么DEBUG MACROs比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

好的我知道了。但你为什么写#ifdef DEBUG?你的意思是调试模式?或任何单词,而不是DEBUG,你可以使用???? – ProDev7

+0

我的意思是在调试版本 - 但不同的环境有不同的方式来说“调试构建”,你当然可以拥有自己的'#ifdef MY_DEBUG',并且当你想要的时候使用'-DMY_DEBUG'作为编译器的选项启用此功能。这不是我发布后的重点 - 关键是有时候你有代码,只有在开发软件时才有意义。显然,用零调用这个函数会导致一个不好的结果,所以最好检查它。但是,“好代码”不应该首先用零调用这个函数,所以在发布时不需要测试它。 –

+0

我用0调用了这个函数,但没有打印出你写的错误。 – ProDev7

1

有一个很好的老断言(...)。如果定义了NDEBUG,则成为NOOP,但是如果未定义NDEBUG,则检查。

顺便说一句:调试宏不调试,只是记录信息。

+0

好的谢谢。现在很清楚 – ProDev7