A NSInteger, 32 bit platformlarda 32 bit ve 64 bit platformlarda 64 bittir. Her NSLogzaman 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_PRINTFaçı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 %dtanımlayıcıya ihtiyacım var . Ancak %dbelirticiyi kullanırsam, 64 bit için derlerken %ldbunun yerine kullanmamı öneren bir uyarı alıyorum .
%ld64 bit boyutunu eşleştirmek için kullanırsam , 32 bit kod için derlerken %dbunun 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).