[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: gcc warnings
From: |
Richard Frith-Macdonald |
Subject: |
Re: gcc warnings |
Date: |
Wed, 17 Aug 2011 14:48:33 +0100 |
On 17 Aug 2011, at 14:41, Andreas Höschler wrote:
> Hi all,
>
>>>
>>> I am cross-building on GNUstep/Solaris and MacOSX. When I build code like
>>>
>>> NSString *message = @"some string"
>>> [NSException raise:NSInternalInconsistencyException format:message];
>>>
>>> on MacOSX 10.6 using GNUstep make, gcc gives the following warning
>>>
>>> SOEditingContext.m:3574: warning: format not a string literal and no
>>> format arguments
>>>
>>> Any idea how to get rid of that one?
>>
>>
>> [NSException raise:NSInternalInconsistencyException format: @"%@",
>> message];
>>
>> The warning is because it can't do a compile time check of message to see if
>> it's a valid format string ... you need to use a string literal as the
>> format string.
>
> Thanks for your feedback! I know that this prevents the warning, but I can't
> do that. The message is calculated by some method and then returned as a
> string. I then need to raise the exception with the readily build string. If
> NSException had a +[raise:string:] method I would use that, but it hasn't! :-(
The example I give above does exactly what you want then.
> I have the same problem with NSLog(). I am again building the message
> somewhere and get it as a NSString. I then simply want to log it out and get
> the above warning.
>
> NSLog([localException description]);
In this case, you would write NSLog(@"%@", [localException deswcription]);
> That's simply annoying! :-( Isn't there some compiler switch that could be
> used to suppress these kind of warnings?
Maybe, but these are *good* warnings ... they prevent you from accidentally
doing things like:
Somewhere in your code ...
message = @"%s %g";
later on crashing your app by ...
[NSException raise: NSInternalInconsistencyException format: message];
Where the %s and %g cause an attempt to try to use random garbage from the
stack.