A NSIntegerè 32 bit su piattaforme a 32 bit e 64 bit su piattaforme a 64 bit. Esiste un NSLogidentificatore che corrisponde sempre alla dimensione di NSInteger?
Impostare
- Xcode 3.2.5
- compilatore llvm 1.6 (questo è importante; gcc non lo fa)
GCC_WARN_TYPECHECK_CALLS_TO_PRINTFacceso
Questo mi sta causando un po 'di dolore qui:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
@autoreleasepool {
NSInteger i = 0;
NSLog(@"%d", i);
}
return 0;
}
Per il codice a 32 bit, ho bisogno %ddell'identificatore. Ma se uso l' %didentificatore, ricevo un avviso durante la compilazione per 64 bit che suggerisce di utilizzare %ldinvece.
Se uso %ldper abbinare la dimensione a 64 bit, durante la compilazione per il codice a 32 bit ricevo un avviso che suggerisce di usare %dinvece.
Come posso risolvere entrambi gli avvisi contemporaneamente? C'è uno specificatore che posso usare che funziona su entrambi?
Anche questo ha un impatto [NSString stringWithFormat:]e [[NSString alloc] initWithFormat:].
static inline NSIntToLong(NSInteger i) {return (long)i;}. Questo evita di disabilitare completamente il controllo del tipo (cioè se il tipo di i cambia).