NSInteger myInt = 1804809223;
NSLog(@"%i", myInt); <====
上記のコードはエラーを生成します:
'NSInteger' 型の値はフォーマット引数として使用しないでください。代わりに 'long' への明示的なキャストを追加してください。
修正されたNSLog
メッセージは実際には です。値を表示したい場合、NSLog(@"%lg", (long) myInt);
の整数値をmyInt
に変換する必要があるのはなぜですか?long
ベストアンサー1
OS X (64 ビット) でコンパイルすると、この警告が表示されます。これは、そのプラットフォームではNSInteger
が として定義されlong
、 が 64 ビット整数であるためです。%i
一方、 の形式は でありint
、これは 32 ビットです。したがって、形式と実際のパラメータのサイズは一致しません。
NSInteger
はプラットフォームに応じて 32 ビットまたは 64 ビットであるため、コンパイラはlong
一般にキャストを追加することを推奨します。
アップデート:iOS 7 も 64 ビットをサポートしているため、iOS 用にコンパイルするときに同じ警告が表示されることがあります。