discuss-gnustep
[Top][All Lists]
Advanced

[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.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]