Re: gcc parsing error?
Re: gcc parsing error?
- Subject: Re: gcc parsing error?
- From: Ken Thomases <email@hidden>
- Date: Mon, 1 Jun 2009 16:47:54 -0500
On Jun 1, 2009, at 4:33 PM, Dave DeLong wrote:
I'm writing a simple test project to try and isolate some unexpected
behavior, and found more unexpected behavior (not what I was looking
for).
I'm trying to use a simple NSAssert macro, like so:
NSAssert(NO, [NSString stringWithFormat:@"Caught unexpected
exception: %@", e]);
However, when I try to compile, I get the error that "macro NSAssert
passed 3 arguments, but takes just 2". To verify what I'm seeing, I
tried changing it to:
NSAssert(NO, [NSString stringWithFormat:@"Caught unexpected
exception: %@, %@", e, e]);
This tells me I'm passing 4 arguments to NSAssert (instead of the
required 2). If I change it to:
NSString *err = [NSString stringWithFormat:@"Caught unexpected
exception: %@", e];
NSAssert(NO, err);
That will compile appropriately. It would therefore appear that the
statement is not getting correctly parsed.
So my question is: Is this expected/documented behavior? (My
searches haven't found anything) If it isn't, is this a known
issue? If not, where would be the best place to file a bug?
The problem seems to be that NSAssert is a macro, which is handled by
the preprocessor rather than the compiler. While the compiler has
been extended to understand Objective-C, the preprocessor may not have
been. It might not be "legal" to extend it that way, since the
preprocessor is used (abused?) in other contexts, for text processing.
It should be possible to work around the problem by surrounding the
second argument in an extra pair of parentheses.
Regards,
Ken
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden