J'ai récemment perdu environ une demi-heure traquer ce comportement bizarre dans NSLog (...):NSLog (...) spécificateur de format incorrect affecte d'autres variables?
NSString *text = @"abc";
long long num = 123;
NSLog(@"num=%lld, text=%@",num,text); //(A)
NSLog(@"num=%d, text=%@",num,text); //(B)
ligne (A) affiche l'attendu "num = 123, text = abc", mais la ligne (B) affiche "num = 123, text = (null)".
De toute évidence, l'impression d'un long long
avec %d
est une erreur, mais quelqu'un peut-il expliquer pourquoi cela provoquerait text
d'être imprimé comme nul?
Si vous compilez avec l'option -Wall, le compilateur vous avertira de problèmes de ce type; Je recommande également fortement le -Werror ainsi les avertissements cassent toujours la construction. –
@Adam Rosenfield, juste une note que la prise en charge de la vérification de format, ala '-Wformat', a toujours été un peu douteuse dans gcc/objc. Cela semble aller mieux avec les versions ultérieures du compilateur, mais je viens de faire une vérification rapide sous Xcode 3.1 et il n'a pas attrapé l'erreur ci-dessus. – johne
Il n'attrape pas l'erreur car -Wformat ne fonctionne que sur les chaînes C (comme dans printf) et est complètement incapable d'analyser les constantes d'objet NSString * (que NSLog utilise). –