A NSInteger
, 32 bit platformlarda 32 bit ve 64 bit platformlarda 64 bittir. Her zaman NSInteger
boyutuna uyan bir NSLog
belirteci var mı?NSLog/printf belirteci?
Kur
- Xcode 3.2.5
- LLVM 1.6 derleyici (bu önemli; gcc bu yapmaz)
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF
beni neden oluyor Yani
açık Burada biraz keder:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
@autoreleasepool {
NSInteger i = 0;
NSLog(@"%d", i);
}
return 0;
}
32 bit kodu için %d
belirticiye ihtiyacım var. Ancak %d
belirtecini kullanırsam, 64 bit için derlerken %ld
kullanıyorum.
32 bit kodu derlerken, %ld
'u 64 bit boyutuna eşlemek için kullanırsam, bunun yerine %d
kullandığımı gösteren bir uyarı alırım.
Her iki uyarıyı da aynı anda nasıl gideririm? Kullanabileceğim bir belirleyici var mı? Bu, ve [[NSString alloc] initWithFormat:]
etkilerini de etkiler.
Bu kesinlikle gitmek için bir yoldur, ancak sanırım statik inline NSIntToLong (NSInteger i) {return (uzun) i;} 'kullanabilirim.Bu, tür denetiminin tamamen devre dışı bırakılmasını önler (örneğin, i türü değişirse). –
@ steven-fisher tarafından iyi düşünmek. Uyarı: • Statik satır içi uzun NSIntToLong (NSInteger i) {return (uzun) i;} ' – Erik
Ayrıca bir NSNumber oluşturabilir ve bunu kaydedebilirsiniz. NSLog (@ "% @", @ (mynsint)); 'http://stackoverflow.com/questions/20355439/nsinteger-and-nsuinteger-in-a-mixed-64bit-32bit-environment – orkoden