ANSIntegerは、32 ビット プラットフォームでは 32 ビット、64 ビット プラットフォームでは 64 ビットです。NSLogのサイズに常に一致する指定子はありNSIntegerますか?
設定
- Xcode 3.2.5
- llvm 1.6 コンパイラ(これは重要です。gcc はこれを行いません)
GCC_WARN_TYPECHECK_CALLS_TO_PRINTFオン
それはここで私にいくつかの悲しみを引き起こしています:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
@autoreleasepool {
NSInteger i = 0;
NSLog(@"%d", i);
}
return 0;
}
32 ビット コードの場合、%d指定子が必要です。しかし、指定子を使用すると、代わり%dに使用することを提案する 64 ビット用にコンパイルするときに警告が表示されます。%ld
64 ビット サイズに合わせていた場合%ld、32 ビット コード用にコンパイルすると、%d代わりに使用することを提案する警告が表示されます。
両方の警告を一度に修正するにはどうすればよいですか? どちらでも機能する、使用できる指定子はありますか?
これは と にも影響[NSString stringWithFormat:]し[[NSString alloc] initWithFormat:]ます。