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 が参照するソリューションと比較して (私の意見では) 大きな欠点が 1debugModeあります。他のソリューションでは、ロギングが無効になっている場合、プリプロセッサはすべてを削除します。falseDebugLogMyDebugLog

于 2012-08-01T18:21:09.267 に答える