continuo a ricevere errori clangore del seguente tipo di codice e io non riesco a capire perché sono errate o il modo di risolverli con soddisfazione di Clang:Clang Error on "Potenziale null dereference."
+ (NSString *)checkForLength: (NSString *)theString error: (NSError **)error {
BOOL hasLength = ([theString length] > 0);
if (hasLength) return theString;
else {
*error = [NSError errorWithDomain:@"ErrorDomain" code:hasLength userInfo:nil];
return nil;
}
}
Lasciando da parte la natura del tutto-artificiosa del esempio (a cui Clang ha fatto obiezioni in modo che sia sufficientemente illustrativo), Clang esita nella riga di assegnazione degli errori con la seguente obiezione:
Potenziale dereferenziazione nulla. Secondo gli standard di codifica in "Creazione e restituzione di oggetti
NSError
", il parametro "errore" potrebbe essere nullo.
Mi piace avere un rapporto Clang incontaminato. Ho letto il documento citato e non riesco a vedere un modo per fare ciò che ci si aspetta; Ho controllato alcune librerie Cocoa open source e questo sembra essere un idioma comune. Qualche idea?
Ugh, non posso credere di averlo perso. Grazie! – bbrown
Ho usato un milione di volte "if (error) * error = ...", invece, senza crash o errori/avvisi dell'analizzatore. Posso andare avanti così? –
Sì, l'equivalenza esplicita di un puntatore nullo a 0 e falso è qualcosa che l'obiettivo C trattiene dalla semplice vecchia C. Personalmente ritengo che sia uno stile pessimo, ma si può semplicemente usare "if (errore)" se proprio lo si vuole. –