Re: Macro to output an NSString containing function name, line number plus a string with a variable number of arguments?
Re: Macro to output an NSString containing function name, line number plus a string with a variable number of arguments?
- Subject: Re: Macro to output an NSString containing function name, line number plus a string with a variable number of arguments?
- From: Wim Lewis <email@hidden>
- Date: Tue, 17 Apr 2012 16:18:06 -0700
On 17 Apr 2012, at 4:01 PM, Laurent Daudelin wrote:
> You're probably right, Christiaan, as it doesn't work any better.
>
> So, how would a macro like this be written?
Macros work by being textually substituted into the place where they're referenced, so presumably you want something like this:
#define FileLog(format, ...) [NSString stringWithFormat:@"\n %s [Line %d] \n %@", __PRETTY_FUNCTION__, __LINE__, [NSString stringWithFormat:(format), ##__VA_ARGS__]]
Then FileLog() expands to an expression whose type is (NSString *), and you can use it in places where you might use other expressions (like function calls), eg:
[logger logMessage:FileLog("foo %d", foovar) atLevel:LOG_DEBUG];
Alternately, if you actually do want the macro to expand into a statement, then the do{ ... }while(0) trick is the customary way to avoid unexpected results.
My usual approach for this particular case is to write a function-like macro like this:
#define FileLog(format, ...) FileLogAtLocation(__PRETTY_FUNCTION__, __LINE__, [NSString stringWithFormat:(format), ##__VA_ARGS__])
and have FileLogAtLocation compose the final logged string. Or even to make the FileLogAtLocation() function variadic.
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Xcode-users mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden