2012-12-13 17 views
2

我想在宏定義中使用塊,但沒有運氣。如何在宏中使用塊

下面是代碼:

#define IPHONE_OR_IPAD_BLOCK(void(^iphoneBlock)(void), void(^ipadBlock)(void)) ({ \ 
    if (iphoneBlock && (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)) \ 
    { \ 
     iphoneBlock(); \ 
    } \ 
    else if (ipadBlock) \ 
    { \ 
     ipadBlock(); \ 
    } \ 
}) 

,它似乎並沒有編譯。

你會如何建議在宏中使用塊?

UPDATE:感謝快速回復拉米鋁Zuhouri,我會用靜態函數,而不是因爲它提供了更多的類型檢查堅持:

NS_INLINE void DoIphoneOrIpadBlock(void (^iphoneBlock)(void), void (^ipadBlock)(void)) 
{ 
    if (iphoneBlock && (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)) 
    { 
     iphoneBlock(); 
    } 
    else if (ipadBlock) 
    { 
     ipadBlock(); 
    } 
} 

回答

2

在宏沒有任何參數檢查,用這種方法改變它:

#define IPHONE_OR_IPAD_BLOCK(iphoneBlock, ipadBlock) ({ \ 
    if (iphoneBlock && (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)) \ 
    { \ 
     iphoneBlock(); \ 
    } \ 
    else if (ipadBlock) \ 
    { \ 
     ipadBlock(); \ 
    } \ 
}) 

如果它使用了錯誤的參數,你可能會得到一個語法錯誤。
如果你不喜歡這種行爲,你可以用一個內聯函數來改變它。