[英]Unexpected results from a macro function
我定義了一個宏如下:
#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__) * ...
或者更好:制作一個合適的函數並讓編譯器優化它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.