Это из-за приоритета операций.Ваш код расширяется до следующего:
NSLog(@"%d", FALSE ? 725 : 280 - FALSE ? 50 : 10);
Что, после «круглых скобок» относительно правил приоритета оператора C, дает вам следующее:
NSLog(@"%d", FALSE ? 725 : ((280 - FALSE) ? 50 : 10));
Это частая проблема с макросами.Они расширяются почти как операция копирования-вставки, поэтому, если вы не позаботитесь об этом, у вас могут возникнуть проблемы с приоритетом оператора (как у вас сейчас).
У вас есть две возможности.Либо добавьте круглые скобки в ваши определения, чтобы этого не произошло:
#define RECT_WIDTH (IS_IPAD ? 725 : 280)
#define RECT_PADDING (IS_IPAD ? 50 : 10)
Или, поскольку это определяется во время компиляции, вы можете использовать директиву #if:
#if IS_IPAD == FALSE
#define RECT_WIDTH 280
#define RECT_PADDING 10
#else
#define RECT_WIDTH 725
#define RECT_WIDTH 50
#endif