[英]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 ,則不會編譯和鏈接下一個if
和some_code
。
if (DEBUG && something_else)
{
some_code
}
如果您的鏈接器沒有丟棄死代碼,這將被編譯並且很可能被鏈接。 因此最好采用預處理器方式,因為當DEBUG
符號未定義或值為 0 (false) 時,它可以保證不存在調試代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.