NSIntegerを32bit/64bit両環境で表示させるには

公開日: 2015年12月20日

iPhoneは5Sから64bitになりましたが、64bit環境だとNSIntegerの値が異なります。

|型|32bit|64bit| |--|--|--| |long|4|8| |size_t|4|8| |NSInteger|4|8| |CGFloat|4|8|

このため、

NSInteger count=1;

NSLog(@”NSInteger count = %d”, count);

といったプログラムを組むと、64bit環境で実行しようとすると

ViewController.m:122:86: Values of type ‘NSInteger’ should not be used as format arguments; add an explicit cast to ‘long’ instead

のようなエラーが出力され、%ldに訂正するようにXcodeに勧められます。 しかし、

NSInteger count=1;
NSLog(@”NSInteger count = %ld”, count);

のように訂正すると、今度は32bit環境で実行した場合にエラーになります。

対策として、32bit/64bit両対応にするには、

NSInteger count=1;
NSLog(@”NSInteger count = %zd”, count);

と「z」を付けると両対応できるようです。