SORU
10 Aralık 2010, Cuma


/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
10 Aralık 2010, Cuma


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bratayley

    Bratayley

    30 Aralık 2010
  • MkElite

    MkElite

    13 NİSAN 2012
  • VitalyzdTv

    VitalyzdTv

    7 AĞUSTOS 2011