2013-03-24 71 views
0

下面的宏給我一個解析錯誤。不能看到這裏有什麼錯。目標c宏不工作

#define adjust(tag, x, y) if (self.tag==tag) { origin.x += x; origin.y += y; return origin; } 

    .... 

adjust(20, 28, 265) 

編輯:

非常感謝您的幫助迄今。看附件截圖。我想使用宏擴展來提高代碼的可讀性。它是一種非常本地使用,因此無風險或重用等

enter image description here

+0

是源自結構?或者這是Rect的一部分? – 2013-03-24 08:08:08

+0

什麼是錯誤? – 2013-03-24 08:08:47

+1

問題是'if(self.tag == tag)'展開爲'if(self.20 == 20)',比較重複問題以獲得可能的解決方案。 – 2013-03-24 09:05:21

回答

2

您的宏引用了未定義的屬性origin,這如果不更換的範圍存在,會導致編譯器錯誤在宏觀擴大之後。實際上,總體來說,你的宏不是很模塊化的。例如,你必須tagself引用,這是屬性,這些屬性

  1. 將是非常上下文
  2. 會導致如果不發生,並有特定的含義,他們編譯失敗宏擴展已經完成
+0

+1喜歡的解釋 – 2013-03-24 08:18:28

+1

我同意宏不是模塊化的。然而,編譯器錯誤的實際原因是'self.tag'到'self.20'的不必要的擴展,而不是未定義的屬性'origin',請參閱我對該問題的評論。 – 2013-03-24 10:16:59

+0

@MartinR - 是的,我同意。如果有的話,在我發佈我的答案之後對***問題進行的編輯說明了這種本地範圍的宏的危險。 – Perception 2013-03-24 10:35:43