/Printf belirleyici NSİnteger için NSLog?
NSInteger
32-bit platformlarda 32 bit, ve 64-bit üzerinde 64 bit platformlar. Her zaman NSInteger
boyutuna uygun NSLog
belirleyicisi var mı?
Kur
- Böyle büyük mükafat 3.2.5
- 1.6 llvm derleyici(bu önemli, gcc bunu) yok
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF
açık
Bu biraz keder beni buraya neden olan:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
@autoreleasepool {
NSInteger i = 0;
NSLog(@"%d", i);
}
return 0;
}
32 bit kod için %d
belirtici ihtiyacım var. Ama eğer %d
belirtici kullanırsam 64 bit için %ld
yerine ben kullanmayı derlerken bir uyarı alıyorum.
Eğer %ld
64 bit boyutunu maç için kullanıyorum, 32 bit kodunu derlerken bir uyarı %d
yerine ben kullanmayı biliyorum.
Nasıl her iki uyarı aynı anda düzeltebilirim? Ya nasıl kullanabilirim bir belirleyici var mı?
Bu da [NSString stringWithFormat:]
[[NSString alloc] initWithFormat:]
etkiler.
CEVAP
Güncelleme cevap:
Geçerli böyle büyük mükafat ile, z
yararlanabilirler ve t
tüm mimarileri uyarı NSInteger
NSUInteger
işlemek için değiştiriciler.
, %tu
imzasız imzalı %zd
kullanımı ve hex %tx
.
Bu Bilgi Greg Parker nezaket geliyor.
Orijinal cevabı:
official recommended approach senin belirleyicisi %ld
ve long
bir gerçek değişken atama.
Nasıl bir yöntem adı ve satır numarası...
Nasıl NSLog Boolean bayrak yazdırmak i...
İkili biçimde yazdırmak için printf bi...
Biçimler uzun printf için argüman nedi...
Ne kadar uzun işaretsiz bir tamsayı(iş...