Domanda
Ho scritto un metodo tha usi myarray, definito nella stessa classe. Quando uso contare restituisce sempre 0. Quando uso:
printf("%d", [myarray count]);
compilatore dice:
Format '%d' expetcs type 'int', but argument 2 has type 'NSUInteger'
perché?
Soluzione
Si dovrebbe usare %lu
invece di %d
. Il compilatore controlla la stringa di formato contro i parametri che si sta passando a printf
, vede che si sta passando un unsigned, ma stamparlo come un intero con segno, ed emette un avvertimento. L'avviso indica che per i numeri maggiore o uguale a 2 ^ 31 printf
sarebbe uscita un gran numero negativo, quando il tipo di dati implica un differente semantica, cioè, un grande numero intero positivo.
modificato in risposta ai commenti da Josh Caswell e thepepp
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow