我定义了一个宏如下:
#define ccpd(__X__, __Y__) (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) ? CGPointMake(__X__ * 0.416667f ,__Y__ * 0.416667f) : CGPointMake(__X__,__Y__)
稍后:
CGPoint p1 = ccpd(1280, 440);
CGPoint p2 = ccpd(1024 + 256, 440);
我得到的是:
(gdb) p p1
$2 = {
x = 533.333801,
y = 183.333481
}
(gdb) p p2
$3 = {
x = 1130.66675,
y = 183.333481
}
为什么我会得到不同的结果?我是不是误解了宏的工作原理?
最佳答案
在第二种情况下,宏扩展为:
CGPointMake( 1024 + 256 * 0.416667f, ...
那就是
CGPointMake( 1024 + (256 * 0.416667f), ...
在宏参数周围添加括号:
CGPointMake( (__X__) * 0.416667f, (__Y__) * ...
或者更好:创建一个合适的函数并让编译器优化它。
关于objective-c - 宏功能的意外结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8601591/