1. ホーム
  2. objective-c

[解決済み] NSInteger 変数をフォーマット引数として使用する場合、なぜ long にキャストする必要があるのですか?

2022-05-12 18:35:38

質問

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

上記のコードでは、エラーが発生します。

NSInteger' 型の値はフォーマット引数として使用しないでください; 代わりに 'long' 型への明示的なキャストを追加してください。

修正された NSLog メッセージは、実際には NSLog(@"%lg", (long) myInt); . の整数値を変換しなければならないのはなぜですか? myIntlong を表示させたい場合は?

解決方法は?

OS X (64ビット) でコンパイルした場合、この警告が表示されます。 NSInteger は次のように定義されています。 long であり、64ビット整数である。また %i の書式は、一方では int であり、32ビットである。つまり、フォーマットと実際のパラメータはサイズが一致しないのです。

このため NSInteger はプラットフォームによって32ビットまたは64ビットであるため、コンパイラーは にキャストを追加します。 long が一般的です。

アップデートしてください。 iOS 7では64bitもサポートされたため、コンパイル時に同じ警告が表示されることがあります。 をiOS用に変更しました。