- cpp меньше для ввода, и
- кто-то может изменить отображение, например, чтобы обернуть отладку вокруг вызова
#ifndef DEBUG
#define ccp(__X__,__Y__) CGPointMake(__X__,__Y__)
#else
#define ccp(__X__,__Y__) myassert2(((__X__) > 0),((__Y__) > 0), \
CGPointMake(__X__,__Y__))
#endif
Зачем нам это делать?Мы можем получить ошибку для строки исходного кода с ошибкой:
#define myassert2(xc1, c2, fun) ((c1) && (c2)? fun((c1),(c2)): \
fprintf(stderr, "Error in file %s, line %d, c1=%d c2=%d\", \
__FILE__, __LINE__, (c1), (c2))
Кстати, в общем случае для макроса безопаснее всегда заключать аргументы в круглые скобки:
#define ccp(__X__,__Y__) CGPointMake((__X__),(__Y__))
но, как указал jamesdlin, в этом случае вызова функции это не имеет значения.
ИМХО, лучше иметь «правило», которое безопасно, легко объяснить и запомнить, и толькопо серьезной причине, а не иметь более сложное правило.В конце концов, есть более интересные проблемы, которые нужно решить (в моем коде), чем заключать или не заключать аргументы макроса в круглые скобки: -)
(я особенно помнил о простых правилах из-за недавней программы BBC Horizonкоторый показал, что люди могут , а не успешно думать о трех вещах одновременно! - (
(ПОМОГИТЕ! Какой простой способ отформатировать исходный код препроцессора C, например, #if ...
? the {} не сработало, обратные галочки не сработали, 4 начальных пробела не сработали. Все они съели некоторые из ведущих #
символов)