Я хотел бы закодировать некоторые макросы перед процессором, чтобы, при необходимости, записать некоторую информацию. Например, в .hМакрос отладки препроцессора для необязательного ведения журнала
//#define ML_DEBUG(x) (x) // flip this bit to do the error logging
#define ML_DEBUG(x) (1==1) // flip this bit to silence
в .m я реализую как:
ML_DEBUG(NSLog(@"Class dealloc: %@", [NSString stringWithCString:object_getClassName(self)]));
код работает отлично, как я представил его. Однако я не думаю, что мой случай «ничего не делать» такой же легкий, как это могло бы быть. Я ожидал, чтобы написать:
//#define ML_DEBUG(x) (x) // flip this bit to do the error logging
#define ML_DEBUG(x) (;) // flip this bit to silence
Поскольку одинокая точка с запятой является действительным Objective-C заявление, я ожидал, что это будет работать, но компилятор говорит мне:
expected expression before ';' token
Мой вопрос: действительно ли Я выбираю самый легкий оператор «ничего не делать», используя 1==1
, или есть менее интенсивный способ сделать это. Или, может быть, мой подход к временному ведению журнала отладки неверен?