簡體   English   中英

來自宏功能的意外結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM