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:]
ます。