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! :-( > > 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]);
This is just plain wrong. Do that, and you can get random stack corruption. You should always do this instead: NSLog(@"%@", [localException description]); > That's simply annoying! :-( Isn't there some compiler switch that could be > used to suppress these kind of warnings? Well, the best way of getting rid of compiler warnings is to write correct code. If you have a string that is generated programatically, then you can't generally guarantee that it doesn't contain format escape sequences, so if you pass it to something that expects a format string then you may have things break. If you have a function that returns output that is usable in format strings in the same context as its input, then there is an __attribute__() that you can add to let the compiler know. See the localisation stuff in NSBundle.h for some examples of this. David -- Sent from my Apple II _______________________________________________ Discuss-gnustep mailing list [email protected] https://lists.gnu.org/mailman/listinfo/discuss-gnustep
