iPhone - Использование макросов препроцессора в target c / XCode - PullRequest
0 голосов
/ 02 мая 2011

Я настраиваю некоторые макросы для целей ведения журнала.

#define LOG_NETWORK_DEBUG(...)    LogMessageF(__FILE__,__LINE__,__FUNCTION__,@"Network",2,__VA_ARGS__)
#define LOG_NETWORK_INFO(...)    LogMessageF(__FILE__,__LINE__,__FUNCTION__,@"Network",1,__VA_ARGS__)
#define LOG_NETWORK_ERROR(...)    LogMessageF(__FILE__,__LINE__,__FUNCTION__,@"Network",0,__VA_ARGS__)


#define LOG_MEDIA_DEBUG(...)    LogMessageF(__FILE__,__LINE__,__FUNCTION__,@"Media",2,__VA_ARGS__)
#define LOG_MEDIA_INFO(...)    LogMessageF(__FILE__,__LINE__,__FUNCTION__,@"Media",1,__VA_ARGS__)
#define LOG_MEDIA_ERROR(...)    LogMessageF(__FILE__,__LINE__,__FUNCTION__,@"Media",0,__VA_ARGS__)

Однако, поскольку мой код в настоящее время заполнен вызовами NSLog, я хочу перевести вызовы NSLog на вызовы LogMessageF,(пока у меня нет времени перенести весь мой код в вышеупомянутые макросы) Мой проект в настоящее время состоит из 2 подпроектов: Сеть, Медиа.

Я хочу, чтобы каждый вызов NSLog был преобразован в соответствующий Макрос.(Вызовы NSLog в проекте Media будут преобразованы в LOG_MEDIA_DEBUG).

Я думал об установке макроса препроцессора в XCode для каждого проекта с именем PROJ_NAME, который будет включать имя проекта.

Мой вопроскак использовать этот макрос?Я хочу сделать что-то вроде этого:

#define NSLog(...) LOG_$PROJ_NAME_DEBUG(__VA_ARGS__)

1 Ответ

1 голос
/ 30 июня 2011

Вы можете использовать ( объединение токенов ). Макрос HELPER используется для оценки макроса PROJ_NAME перед объединением.

#define PROJ_NAME NETWORK

#define LOG_DEBUG(P) LOG_##P##_DEBUG
#define HELPER(X) LOG_DEBUG(X)
#define NSLog(...) HELPER(PROJ_NAME)(__VA_ARGS__)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...