首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C调试,#if DEBUG vs if (DEBUG)

C调试,#if DEBUG vs if (DEBUG)
EN

Stack Overflow用户
提问于 2020-01-02 02:56:50
回答 1查看 94关注 0票数 0

首先:如果之前有人问过这个问题,我很抱歉。我是一个聪明的谷歌人,但这真的把我难住了,我在上面找不到任何东西。

我目前正在写一个小型库,我想为它实现调试。我还希望能够完全关闭调试,编译后的代码不应该包含任何调试检查的痕迹。我用的是GCC和C99。

我知道我可以使用:

代码语言:javascript
复制
/* Method 1, guaranteed good */
#define DEBUG 0
#if DEBUG
/* Do debugging here */
#endif

它完成了工作,并且在if和endif之间没有发生任何事情的痕迹,但我认为这看起来很丑陋。我在以下方面取得了一些成功:

代码语言:javascript
复制
/* Method 2, seems to be valid */
#define DEBUG 0
if (DEBUG && value_to_check) { /* More debugging here */ }

在可读性方面,我更喜欢方法2。

我想知道的是,如果我使用方法2而不是久经考验的方法1,我是否会失去什么,或者如果我使用方法2而不是方法1,GCC会不会骗我?

EN

回答 1

Stack Overflow用户

发布于 2020-01-02 03:15:44

区别在于:

代码语言:javascript
复制
#if DEBUG
if(something_else)
{
    some_code
}
#endif 

如果未定义DEBUG或其值为,则不会编译和链接下一个ifsome_code

代码语言:javascript
复制
if (DEBUG && something_else)
{
   some_code
}

如果你的链接器没有丢弃死代码,那么这段代码将会被编译并且很可能被链接。因此,更好的方法是采用预处理器的方式,因为当DEBUG符号未定义或值为零(false)时,它可以保证不存在调试代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59555241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档