Pie*_*ter 28 64-bit objective-c ios arm64
我在NSLog/NSAssert等调用中有相当数量的字符串格式说明符,它们分别使用%d
和%u
使用NSInteger (= int on 32bit)
和NSUInteger (= unsigned int on 32bit)
类型.
将应用程序转换为64位时,会发出警告(当然),正如%ld %lu
现在成为的类型long
和unsigned long
类型所预期的那样.
简单地转换格式说明符当然会在32位构建中引入反向警告.
因此,我认为唯一可以免于警告的解决方案是使用64位说明符,并在34位值的类型中转换为34位值,并在32位构建中给出警告.
但我想知道是否有专门针对NSInteger
和NSUInteger
类型的格式说明符可以在没有强制转换的情况下在两种架构上工作?
ily*_* n. 61
我认为最安全的方法是将它们装入NSNumber
实例中.
NSLog(@"Number is %@", @(number)); // use the highest level of abstraction
Run Code Online (Sandbox Code Playgroud)
由于标记指针魔法,这个拳击通常不必创建新对象.
如果你真的不想使用NSNumber
,你可以手动投射原始类型,正如其他人建议的那样:
NSLog(@"Number is %ld", (long)number); // works the same on 32-bit and 64-bit
Run Code Online (Sandbox Code Playgroud)
小智 38
您还可以在登录控制台时使用%zd
(NSInteger
)和%tu
(NSUInteger
).
NSInteger integer = 1;
NSLog(@"first number: %zd", integer);
NSUInteger uinteger = 1;
NSLog(@"second number: %tu", uinteger);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16686 次 |
最近记录: |