2011-05-02 107 views
0

我为记录目的设置了一些宏。iPhone - 在目标c/XCode中使用预处理器宏

#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调用转换为相应的宏。 (Media项目中的NSLog调用将被转换为LOG_MEDIA_DEBUG)。

我想过为每个名为PROJ_NAME的项目在XCode中设置一个预处理器宏,其中包含项目名称。

我的问题是如何使用该宏?我想这样做:

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

回答

1

您可以使用(token concatenation)。在连接之前,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__)