A NSIntegertiene 32 bits en plataformas de 32 bits y 64 bits en plataformas de 64 bits. ¿Hay un NSLogespecificador que siempre coincida con el tamaño de NSInteger?
Preparar
- Xcode 3.2.5
- Compilador llvm 1.6 (esto es importante; gcc no hace esto)
GCC_WARN_TYPECHECK_CALLS_TO_PRINTFencendido
Eso me está causando dolor aquí:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
@autoreleasepool {
NSInteger i = 0;
NSLog(@"%d", i);
}
return 0;
}
Para el código de 32 bits, necesito el %despecificador. Pero si uso el %despecificador, recibo una advertencia al compilar para 64 bits sugiriendo que use %lden su lugar.
Si uso %ldpara que coincida con el tamaño de 64 bits, cuando compilo para el código de 32 bits recibo una advertencia que sugiere que use %den su lugar.
¿Cómo soluciono ambas advertencias a la vez? ¿Hay algún especificador que pueda usar que funcione?
Esto también impacta [NSString stringWithFormat:]y [[NSString alloc] initWithFormat:].
static inline NSIntToLong(NSInteger i) {return (long)i;}. Esto evita deshabilitar la comprobación de tipo por completo (es decir, si el tipo de i cambia).