% d для 32-разрядных и 64-разрядных

NSInteger precedence = [self operatorPrecedence];
[d appendFormat:@"precedence:%d, ", precedence];

дает:

Предупреждение: Формат указывает тип 'int', но аргумент имеет тип "NSInteger" (он же "длинный" )

и Xcode предлагает изменить %d на %ld.

Однако он работает только для 32-битной или 64-битной цели, поскольку NSInteger:

 #if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
 typedef long NSInteger;
 typedef unsigned long NSUInteger;
 #else
 typedef int NSInteger;
 typedef unsigned int NSUInteger;
 #endif

Какой лучший способ убить предупреждение, как для 32-битных, так и для 64-битных целей?

Ответ 2

Попробуйте это

UPD:

NSInteger precedence = [self operatorPrecedence];
[d appendFormat:@"precedence:%ld, ", (long)precedence];