0

有些东西我根本不明白,因为我一辈子都无法让它发挥作用。我想创建一个扩展NSLog(NSString *format, ...). 这是我想出的:

NSLogExtensions.h

#define DebugLog(debugMode, format, ...) MyDebugLog(debugMode, [[NSString stringWithFormat:@"<%@> (Line %d): ", NSStringFromClass([self class]), __LINE__] stringByAppendingString:format], ##__VA_ARGS__)

@interface NSLogExtensions : NSObject

@end

NSLogExtensions.m

#import "NSLogExtensions.h"

@implementation NSLogExtensions

void MyDebugLog(bool debugMode, NSString *format, ...) {
    va_list(argumentList);
    va_start(argumentList, format);
    if (debugMode) {
        NSLogv(format, argumentList);
    }
    va_end(argumentList);
}

@end

我希望能够包含 NSLogExtensions 头文件,然后能够使用宏,但我仍然收到 GCC 隐式函数声明警告。

4

2 回答 2

2

签出这个答案

真的不应该在生产代码上使用 NSLog() 吗?

它有更多关于如何为扩展的 NSLogs 使用宏的详细信息

于 2012-08-01T17:07:11.603 回答
1

DebugLog宏使用函数,MyDebugLog所以必须添加原型

void MyDebugLog(bool debugMode, NSString *format, ...);

NSLogExtensions.h。然后它编译没有警告。

但是与@calvinBhai 所指的解决方案相比,您的解决方案有一个(在我看来)很大的缺点:即使您通过设置关闭日志记录 ,debugMode宏也会评估所有参数并调用。使用其他解决方案,如果禁用日志记录,预处理器将删除所有内容。falseDebugLogMyDebugLog

于 2012-08-01T18:21:09.267 回答