簡體   English   中英

C宏,((void)0)是什么意思?

[英]C macros, what's the meaning of ((void)0)?

給定以下根據 C99 標准編寫的代碼:

#define LOW 1 
#define MEDIUM 2 
#define HIGH 3

#define LOGGING_LEVEL HIGH

#if LOGGING_LEVEL >= MEDIUM
#define LOG_MEDIUM(message) printf(message) 
#else
#define LOG_MEDIUM(message) ((void)0) 
#endif

void load_configuration() { 
//...
LOG_MEDIUM("Configuration loaded\n"); 
}

((void)0)的目的是什么,我搜索了 web 很多,但沒有找到任何相關信息。

另外,我們為什么不寫; 使用printf(message)

主要思想是如果不滿足條件,則排除所有LOG_MEDIUM 編譯后這些調用不會影響功能。

void-cast 修復了編譯器警告。 這是一個類似的測試用例:

int main(void)
{
        0; // generates "foo.c:3:2: warning: statement with no effect"
        (void)0;
        return 0;
}

並且(使用 腳本添加 gcc 的警告標志)您會看到沒有強制轉換的行的警告:

$ gcc-stricter -c foo.c
foo.c: In function ‘main’:
foo.c:3:2: warning: statement with no effect [-Wunused-value]
  0;
  ^

額外的括號和缺少分號允許宏的結果與printf互換使用。

暫無
暫無

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

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