A NSInteger
est de 32 bits sur les plateformes 32 bits, et de 64 bits sur les plateformes 64 bits. Existe-t-il un NSLog
qui correspond toujours à la taille de NSInteger
?
Configuration
- Xcode 3.2.5
- Compilateur llvm 1.6 (ceci est important ; gcc ne le fait pas)
-
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF
allumé
C'est ce qui me cause des ennuis :
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
@autoreleasepool {
NSInteger i = 0;
NSLog(@"%d", i);
}
return 0;
}
Pour le code 32 bits, j'ai besoin du %d
. Mais si j'utilise le %d
je reçois un avertissement lors de la compilation pour 64 bits suggérant d'utiliser le spécificateur %ld
à la place.
Si j'utilise %ld
pour correspondre à la taille 64 bits, lorsque je compile pour du code 32 bits, j'obtiens un avertissement me suggérant d'utiliser %d
à la place.
Comment puis-je corriger les deux avertissements en même temps ? Existe-t-il un spécificateur que je peux utiliser et qui fonctionne sur les deux ?
Cela a également un impact sur [NSString stringWithFormat:]
y [[NSString alloc] initWithFormat:]
.