Макро декларация - PullRequest
       1

Макро декларация

1 голос
/ 23 марта 2012

Я нашел этот макрос во время копания в исходном коде игры tweejump.

#define ccp(__X__,__Y__) CGPointMake(__X__,__Y__)

Для меня cpp это просто псевдоним CGPointMake. Зачем это нужно?

Ответы [ 2 ]

3 голосов
/ 23 марта 2012
  1. cpp меньше для ввода, и
  2. кто-то может изменить отображение, например, чтобы обернуть отладку вокруг вызова

#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 начальных пробела не сработали. Все они съели некоторые из ведущих # символов)

3 голосов
/ 23 марта 2012

Это просто псевдоним для CGPointMake. гораздо проще написать 3 символа, чем 9.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...