2015-05-14 65 views

回答

0

由於這是目前寫的,很少有可能有意義使用它,除非你只想處理基礎上的X值假案。

恕我直言,你可以把它重新寫成

#define IS_THIS_CORRECT(X) if(X) 

然後,你可以使用它像

int p = 5; 
IS_THIS_CORRECT(X) 
{ 
     printf("yay !!!\n"); 
} 
+0

@ForceBru感謝編輯。 :-) –

0

我猜測,但只有這樣,這使得任何意義,我是如果它應該被用作

IS_THIS_CORRECT(foo) else { do_something(); } 

儘管如此,仍然很奇怪。

+0

非常感謝您的意見。 – user3593776

1
#define IS_THIS_CORRECT(X) if(X){} 

它可以用來檢查是否X(任意值)不爲零,或者不是一個空字符串等,你可以做以下

IS_THIS_CORRECT("Hello") 
else puts("The string is empty"); 

你最好環繞X與另一一對大括號更多的安全性:

#define IS_THIS_CORRECT(X) if((X)){} 

我建議你到這個預處理語句重命名爲IT_IS_CORRECT甚至IS_CORRECT爲更可讀性。

+5

額外的括號似乎是一個壞主意。 'X'已經括號了,所以添加它不是必須的,但是會使用通用編譯器來壓制'IS_THIS_CORRECT(foo = bar)'的有用編譯器警告。 – Wintermute

+0

@Wintermute,我只是關注K&R的解決方案。據我所知,他們總是說,必須將這些額外的大括號添加到預處理語句中,如#define add(x,y)(x)+(y)'。嘗試刪除大括號並執行'add(5 + 7,10 + 2)' – ForceBru

+2

這大部分都是如此,但是在if(X)中已經有一對圓括號做這項工作,這些圓括號意味着:確保'X'被視爲一個單一的實體。 (不好的例子,順便說一下,使用'mul'宏可以更好地工作)。 – Wintermute