A NSInteger - 32 бита на 32-битных платформах и 64 бит на 64-разрядных платформах. Существует ли спецификатор NSLog, который всегда соответствует размеру NSInteger?
Настройка
- Xcode 3.2.5
- llvm 1.6 компилятор (это важно, gcc не делает этого)
-
GCC_WARN_TYPECHECK_CALLS_TO_PRINTFвключен
Это вызывает у меня некоторое горе:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
@autoreleasepool {
NSInteger i = 0;
NSLog(@"%d", i);
}
return 0;
}
Для 32-битного кода мне нужен спецификатор %d. Но если я использую спецификатор %d, я получаю предупреждение при компиляции для 64 бит, предлагая вместо этого использовать %ld.
Если я использую %ld для соответствия размеру 64 бит, при компиляции для 32-битного кода я получаю предупреждение, предлагая вместо этого использовать %d.
Как установить оба предупреждения одновременно? Есть ли спецификатор, который я могу использовать, который работает либо?
Это также влияет на [NSString stringWithFormat:] и [[NSString alloc] initWithFormat:].