Я бы хотел написать код в некоторых макросах препроцессора, чтобы при желании регистрировать некоторую информацию. Например, в .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
Поскольку одиночная точка с запятой является допустимым оператором target-c, я ожидал, что это сработает, но компилятор говорит мне:
expected expression before ';' token
У меня вопрос: я выбрал самое легкое утверждение "ничего не делать", используя 1==1
, или есть менее интенсивный способ сделать это. Или, может быть, весь мой подход к временному ведению журнала отладки ошибочен?