[英]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.