gpt4 book ai didi

ios - 静态方法的宏日志使用问题

转载 作者:行者123 更新时间:2023-11-28 22:09:37 24 4
gpt4 key购买 nike

我编写了定义日志级别并打印出 TAG + 方法名称的宏:

#define NSLogDebug(topic, frmt, ...) \
do{ if(LOG_LEVEL >= 4) \
NSLog( (topic @" : " @"%@" @" : " frmt), \
NSStringFromSelector(_cmd), ##__VA_ARGS__); } while(0)

用法:

 #define TAG @"agent_magr"
/* ... */
-(void)registerforDeviceLockNotif
{
NSLogDebug(TAG, @"init");

输出是:

Agent[741:907] agent_magr : registerforDeviceLockNotif : init

但是它只适用于非静态方法。

进入方法如下:

static void displayStatusChanged(/*  */)
{}

我得到错误:

Use of undeclared identifier '_cmd' Did you mean 'rcmd'?

我想使用 __PRETTY_FUNCTION__:

#define NSLogDebug(topic, frmt, ...) \
do{ if(LOG_LEVEL >= 4) \
NSLog( (topic @" : " @"%s" @" : " frmt), \
__PRETTY_FUNCTION__ , ##__VA_ARGS__); } while(0)

但是这个打印出带有参数的完整函数:

Agent[773:907] agent_magr : void displayStatusChanged(CFNotificationCenterRef, void *, CFStringRef, const void *, CFDictionaryRef) : init

如何让它在静态方法中工作?

谢谢,

最佳答案

那不是静态方法;这是一个功能。 _cmd 变量只存在于方法中(因为选择器只调用方法)。如果您希望它在函数和方法中都起作用,则必须使用 __FUNCTION____PRETTY_FUNCTION__,它们都是 C 字符串。

关于ios - 静态方法的宏日志使用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23223757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com