在 Objective-C/Xcode 中使用预处理器宏

发布于 2024-11-05 00:54:53 字数 1031 浏览 4 评论 0原文

我正在设置一些宏用于记录目的。

#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 调用。 (直到我有时间将所有代码迁移到上面的宏) 我的 iOS 项目目前由 2 个子项目组成:网络、媒体。

我希望每个 NSLog 调用都转换为适当的宏。 (媒体项目中的 NSLog 调用将转换为 LOG_MEDIA_DEBUG)。

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

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

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

I'm setting up some macros for Logging purposes.

#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__)

However, since my code is currently infested with with NSLog calls, I want to transfer the NSLog calls to LogMessageF calls. (till I have time to migrate all my code to above macros)
My project for iOS is currently comprised of 2 sub projects: Network, Media.

I want each NSLog calls to be converted to the appropriate Macro. (NSLog calls in the Media project would be converted to LOG_MEDIA_DEBUG).

I thought about setting a preprocessor macros in Xcode for each project called PROJ_NAME that will include the project name.

My question is how to use that Macro? I want to do something like this:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无可置疑 2024-11-12 00:54:53

您可以使用(令牌串联)。 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__)

You can use (token concatenation). HELPER macro is used to evaluate PROJ_NAME macro before concatenation.

#define PROJ_NAME NETWORK

#define LOG_DEBUG(P) LOG_##P##_DEBUG
#define HELPER(X) LOG_DEBUG(X)
#define NSLog(...) HELPER(PROJ_NAME)(__VA_ARGS__)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文