Комбинация обратной косой черты и перевода строки эквивалентна отсутствию букв, поэтому
#define x y \
z
эквивалентно
#define x y z
Кроме того, согласно стандарту директивы препроцессора в теле макроса не раскрываются и не интерпретируются, и #ifdef
передается компилятору вместо условного удаления кода между ними.
Вы можете проверить это поведение, создав файл a.c
с содержимым
#define x y \
z
#define v \
#ifdef E
x
v
и предварительной обработки с помощью команды gcc -E a.c
.
В вашей ситуации вам нужно сделать
#ifdef LITE_VERSION
#define checkLiteMessage \
{ \
if (alertView.tag == 100) \
{ \
if (buttonIndex == 1) \
[ [UIApplication sharedApplication] openURL: buyAppLink]; \
[alertView release]; \
return; \
} \
}
#else
#define checkLiteMessage
#endif