2017-01-17 6 views
0

メッセージを記録するために使用するかなり簡単なマクロがあります。マクロ:Objective-C:マクロ内で ']'が必要です

#define LogDebug(tag, fmt, ...) [MyLogger logDebug:[NSString stringWithFormat:fmt, ##__VA_ARGS__] \ 
function:NSStringFromSelector(_cmd) file:@__FILE__ line:__LINE__ tag:tag]; 

そして私はそれを呼び出す:問題

LogDebug(@"tag", @"message"); 

@"tag"の初めに、私はXcodeのは、マクロ呼び出し(ない定義で@記号を指すExpected ']'を取得)。

重要:私はtag変数を削除すると、すべてが完璧に動作します

#define LogDebug(fmt, ...) [MyLogger logDebug:[NSString stringWithFormat:fmt, ##__VA_ARGS__] \ 
function:NSStringFromSelector(_cmd) file:@__FILE__ line:__LINE__ tag:@"tag"]; 

LogDebug(@"message"); 

任意のアイデア?

答えて

2

tagというマクロパラメータは、同じ方法でという名前のlogDebugのパラメータと干渉します。マクロへの変更:

#define LogDebug(tg, fmt, ...) [MyLogger logDebug:[NSString stringWithFormat:fmt, ##__VA_ARGS__] \ 
function:NSStringFromSelector(_cmd) file:@__FILE__ line:__LINE__ tag:tg]; 

(すなわちLogDebug(tag, fmt, ...)LogDebug(tg, fmt, ...)およびtag:tagtag:tgに)。

+0

賢明、ありがとう。コンピュータサイエンスミスにクラシックイントロ:) – Yotam

関連する問題