ich etwa eine halbe Stunde vor kurzem verschwendet dieses seltsame Verhalten in NSLog Aufspüren von (...):NSLog (...) falscher Formatbezeichner beeinflusst andere Variablen?
NSString *text = @"abc";
long long num = 123;
NSLog(@"num=%lld, text=%@",num,text); //(A)
NSLog(@"num=%d, text=%@",num,text); //(B)
Line (A) druckt die erwartete "num = 123, text = abc", aber Linie (B) druckt "num = 123, text = (null)". Offensichtlich
, Drucken ein long long
mit %d
ein Fehler, aber kann jemand erklären, warum es verursachen würde text
als null gedruckt werden?
Wenn Sie mit der Option -Wall kompilieren, warnt der Compiler Sie vor Problemen wie diesem; Ich empfehle auch dringend den -Werror so Warnungen immer den Build zu brechen. –
@Adam Rosenfield, nur ein Hinweis, dass die Unterstützung für die Formatprüfung, ala '-Wformat', in gcc/objc immer ein bisschen zweifelhaft war. Dies scheint mit späteren Versionen des Compilers besser zu werden, aber ich habe nur eine kurze Überprüfung unter Xcode 3.1 durchgeführt und es ist der obige Fehler nicht aufgetreten. – johne
Es fängt den Fehler nicht ab, da -Wformat nur mit C-Zeichenfolgen funktioniert (wie in printf) und vollständig NSString * -Objektkonstanten (die NSLog verwendet) nicht analysieren kann. –