私は最近のNSLog(...)で、この奇妙な行動を追跡する約半分の時間を無駄に:NSLog(...)の不適切な書式指定子が他の変数に影響しますか?
NSString *text = @"abc";
long long num = 123;
NSLog(@"num=%lld, text=%@",num,text); //(A)
NSLog(@"num=%d, text=%@",num,text); //(B)
ライン(A)は期待 "NUM = 123、テキスト= ABC" が、ライン(Bを出力します)は、「num = 123、text = (null)」と印刷します。
明らかに、long long
を%d
と印刷するのは間違いですが、なぜtext
がヌルとして印刷されるのか説明できますか?
-Wallオプションでコンパイルすると、コンパイラはこのような問題について警告します。警告が常にビルドを破るように-Werrorも強く推奨します。 –
@Adam Rosenfield、ala '-Wformat'という形式チェックのサポートは、gcc/objcでは常にちょっと変わっています。これはコンパイラのそれ以降のバージョンでうまくいくようですが、私はXcode 3.1の下でクイックチェックを行い、上記のエラーをキャッチしませんでした。 – johne
-WformatはCの文字列(printfのような)にしか作用せず、NSString *オブジェクト定数(NSLogが使用する)を完全に解析できないため、エラーをキャッチしません。 –