簡體   English   中英

我是否檢查是否存在具有或不具有parens的宏功能?

[英]Do I check the existence of a macro function with or without the parens?

在定義宏函數之前,我可以檢查它是否已經存在
(這可以避免覆蓋先前的定義)。

我可以像這樣實現檢查和定義:

#ifndef MACRO(X)
#define MACRO(X) FUNCTION(X)
#endif

或者像這樣:

#ifndef MACRO
#define MACRO(X) FUNCTION(X)
#endif

當函數已經定義時,兩者似乎都有效。
那么,哪個是正確的? 哪個更受歡迎?

沒有。

該標准規定#ifndef相當於#if !defined ,並且該參數defined必須是一個(可能是括號內) 識別符 您不能在標識符中包含parens,因此defined MACRO(X)不是允許的形式。 這種defined使用會導致未定義的行為,因此它不可移植。

沒有括號。 因為這個原因:

test.c的

#ifdef MACRO(x)
#endif
int main() {}

如果你試圖編譯這個:

$ gcc test.c
test.c:2:13: warning: extra tokens at end of #ifdef directive [enabled by default]
 #ifdef MACRO(x)
             ^

它發出警告。

暫無
暫無

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

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