簡體   English   中英

C 調試,#if DEBUG vs if (DEBUG)

[英]C debugging, #if DEBUG vs if (DEBUG)

首先:如果之前有人問過這個問題,我很抱歉。 我是一個 apt googler,但這真的讓我難住了,我在上面找不到任何東西。

我目前正在編寫一個小型庫,我想為它實現調試。 我還希望能夠完全關閉調試,並且編譯后的代碼不應包含任何調試檢查的痕跡。 我正在使用 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符號未定義或值為 0 (false) 時,它可以保證不存在調試代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM