A NSInteger
, 32 bit platformlarda 32 bit ve 64 bit platformlarda 64 bittir. Her NSLog
zaman boyutuyla eşleşen bir belirtici var mı NSInteger
?
Kurmak
- Xcode 3.2.5
- llvm 1.6 derleyici (bu önemlidir; gcc bunu yapmaz)
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF
açık
Bu bana biraz keder veriyor:
#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
tanımlayıcıya ihtiyacım var . Ancak %d
belirticiyi kullanırsam, 64 bit için derlerken %ld
bunun yerine kullanmamı öneren bir uyarı alıyorum .
%ld
64 bit boyutunu eşleştirmek için kullanırsam , 32 bit kod için derlerken %d
bunun yerine kullanmamı öneren bir uyarı alıyorum .
Her iki uyarıyı aynı anda nasıl düzeltirim? Her ikisinde de çalışan kullanabileceğim bir tanımlayıcı var mı?
Bu aynı zamanda etkiler [NSString stringWithFormat:]
ve [[NSString alloc] initWithFormat:]
.
static inline NSIntToLong(NSInteger i) {return (long)i;}
. Bu, tür denetimini tamamen devre dışı bırakmayı önler (yani, i türünün değişmesi durumunda).