gpt4 book ai didi

C 调试,#if DEBUG 与 if (DEBUG)

转载 作者:行者123 更新时间:2023-11-30 16:07:42 26 4
gpt4 key购买 nike

首先:如果之前有人问过这个问题,我很抱歉。我是一个熟练的谷歌用户,但这确实让我难住了,我找不到任何东西。

我目前正在编写一个小型库,我想对其进行调试。我还希望能够完全关闭调试,并且编译后的代码不应包含任何调试检查的痕迹。我正在使用 GCC 和 C99。

我知道我可以使用:

/* Method 1, guaranteed good */
#define DEBUG 0
#if DEBUG
/* Do debugging here */
#endif

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

/* Method 2, seems to be valid */
#define DEBUG 0
if (DEBUG && value_to_check) { /* More debugging here */ }

为了便于阅读,我更喜欢方法 2。

我想知道的是,如果我使用方法 2 而不是可靠的方法 1,我是否会失去任何东西,或者 GCC 是否会搞砸我?

最佳答案

区别是:

#if DEBUG
if(something_else)
{
some_code
}
#endif

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

<小时/>
if (DEBUG && something_else)
{
some_code
}

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

关于C 调试,#if DEBUG 与 if (DEBUG),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59555241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com