Полагаю, вы получите предупреждение только если DEBUG = 0. Проблема в том, что после запуска препроцессора компилятор видит код, подобный следующему:
...
MYObject.enableLogging ? NSLog(@"your log",...) : TRUE;
...
Компилятор может позволить вам игнорировать результаты функции, предполагая, что функция сделала все, что вы хотели, и результат бесполезен. Однако, когда вы сталкиваетесь с проблемой вычисления значения в вашем коде с помощью троичного оператора, он ожидает, что вы захотите получить результат этого вычисления. Если вы знаете, что никогда не будете использовать результат этого макроса, вы можете разыграть его как void, чтобы игнорировать его:
#define MYSERVERLOG(iLog, ...) ((void)(iLog ? NSLog(__VA_ARGS__) : TRUE))
Если вы можете использовать результаты макроса, то вам придется выполнять приведение при каждом использовании макроса и игнорировать результат или жить с предупреждениями. В этом случае вы все равно должны ставить скобки вокруг макроса, чтобы избежать возможных проблем.
#define MYSERVERLOG(iLog, ...) (iLog ? NSLog(__VA_ARGS__) : TRUE)