9

Sto cercando di sbarazzarsi di un fastidioso avviso che CLANG/LLVM 3.0 mi sta dando. Ho il seguente Ivar impostato nel mio oggetto:La proprietà è presunta atomica per impostazione predefinita

bool preloaded; 

E la seguente dichiarazione di proprietà:

@property(readonly) bool preloaded; 

E la seguente chiamata sintetizzare:

@synthesize preloaded; 

Così com'è, il compilatore si lamenta :

Property is assumed atomic by default

Se cambio la dichiarazione di proprietà di aggiungere "atomica":

@property(atomic,readonly) bool preloaded; 

Si lamenta che, troppo:

error: expected a property attribute before 'atomic'

così sembra che io sia dannato se lo faccio e dannato se I don' t ... c'è qualcosa che mi manca?

+0

Beh, 'atomic' non è una parola chiave attributo valido, quindi ha senso che il secondo bit provoca un errore. Non so per il primo, però. –

+0

Sì, è quello che ho capito, ma visto che la sintassi Xcode evidenzia "atomico", ho pensato che forse l'avevano aggiunta come parola chiave con attributo valido. – Karl

+0

Ho provato '@property (atomic, readonly) bool precaricato;' e compila bene. Rimuove anche l'avviso. Sto usando Xcode 4.2.1. –

risposta

9

Sembra che l'avviso del compilatore LLVM implicito nelle impostazioni del progetto sia Implicito Obiettivo atomico-C Proprietà. Disattivando questo rimuoverà l'avviso.

Come indicato sopra, atomic non è una parola chiave valida ed è semplicemente implicita dall'assenza di nonatomic. Dal di Declared Properties documentation di Apple:

You can use this attribute to specify that accessor methods are not atomic. (There is no keyword to denote atomic.)

+0

Lo contrassegnerò come "corretto" poiché disattivando l'impostazione si elimina l'avviso, ma sono ancora perplesso sul motivo per cui tali proprietà sono state contrassegnate per iniziare. È un bug in LLVM? Sarei molto più felice se potessi mantenere tutti gli avvisi abilitati ... – Karl

+2

Gli avvertimenti sono più di un semplice gioco per soddisfare il compilatore, servono come promemoria per lo sviluppatore di essere a conoscenza di certi comportamenti durante la programmazione. Per mantenere attivato l'avviso, ma disabilitare questa istanza, consultare [Controllo della diagnostica degli analizzatori statici] (http://clang.llvm.org/docs/UsersManual.html#diagnostics) nella documentazione di Clang. – jnic

+0

Fantastico! Ha funzionato come un incantesimo! Ora posso compilare tutti gli avvisi tranne pedante (a causa del mio utilizzo di ## __ VA_ARGS__ per la registrazione) – Karl