2010-07-15 33 views
2

我有这样的方法:写这个宏:(Objective-C的)

- (CGPoint) _convertCGPointCT2UIKit:(CGPoint)ctPoint{ 
CGPoint uikitPoint = CGPointMake(ctPoint.x + INITIAL_HORIZ_OFFSET, 
      self.bounds.size.height - ctPoint.y - INITIAL_VERT_OFFSET); 
return uikitPoint; 
} 

有什么办法可以让这个宏? 我试过这个,但我得到像“;预计之前)”等错误。

#define CGPointUIKit2CT(p) CGPointMake(p.x - INITIAL_HORIZ_OFFSET, self.bounds.size.height - p.y - INITIAL_VERT_OFFSET); 

在此先感谢。

伊格纳西奥

回答

5

一对夫妇的经验法则来指导你:

  • 一切括号
  • 不结束宏用分号,这可能是什么产生的错误。当您使用它时,请将分号放入您的代码中。

这里是我的答案:

#define CGPointUIKit2CT(p) CGPointMake(((p).x) - INITIAL_HORIZ_OFFSET, self.bounds.size.height - ((p).y) - INITIAL_VERT_OFFSET) 
+0

哎唷!多么愚蠢的错误。冒号! 谢谢克里斯 – nacho4d 2010-07-15 16:49:07

2

虽然可能有原因,以避免方法分派这样的事情,也没有理由这样做是一个宏,而不是一个静态的内联函数:

static inline 
CGPoint CGPointUIKit2CT(UIView *self, CGPoint ctPoint) { 
    CGPoint uikitPoint = CGPointMake(ctPoint.x + INITIAL_HORIZ_OFFSET, 
     self.bounds.size.height - ctPoint.y - INITIAL_VERT_OFFSET);' 

    return uikitPoint; 
} 

这将编译出与宏相同的内容,但会提供更好的调试和分析信息。