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