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: Laurent Daudelin <email@hidden>
- Date: Tue, 17 Apr 2012 16:27:45 -0700
Thank you, that is very helpful!
-Laurent.
--
Laurent Daudelin
AIM/iChat/Skype:LaurentDaudelin http://www.nemesys-soft.com/
Logiciels Nemesys Software email@hidden
On Apr 17, 2012, at 16:18, Wim Lewis wrote:
>
> 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