Pourquoi un NSInteger variable doivent être moulés à long lorsqu'il est utilisé comme un argument de format?

NSInteger myInt = 1804809223;
NSLog(@"%i", myInt); <==== 

Le code ci-dessus produit une erreur:

Values of type "NSInteger" should not be used as format arguments: add an explicit cast to 'long' instead.

Le bon NSLog message est en fait NSLog(@"%lg", (long) myInt); Pourquoi dois-je convertir la valeur de l'entier de myInt à la longue, si je veux de la valeur à afficher?

  • si vous utilisez NSLog(@"%ld", (long) myInt);, le long casting est pour le faire correspondre avec le l qualificatif de %ld, mais tout cela est inutile, car NSLog(@"%d", myInt); est suffisante (étant donné que nous pouvons voir que myInt n'est pas long. Ligne de fond, vous lancez myInt si vous utilisez long de qualification de la chaîne de format, mais pas besoin d'utiliser soit en long format de la chaîne de qualifier ou long exprimés ici.
  • Apparemment, il n'est pas vrai que NSLog(@"%i", myInt); est suffisant parce que vous obtiendrez le message d'erreur que j'ai indiqué ci-dessus.
  • Voir Martin R du commentaire. Vous avez posté votre question avec iOS balise (où NSInteger n'est pas long) , mais il semble que vous êtes de la compilation avec OS X cible (où NSInteger est long).
  • Ahh, je vois. Je ne savais pas iOS et OSX rendrait le NSInteger différents dans le bit et le type.
InformationsquelleAutor Daniel Lee | 2013-04-18