我有一个 Swift 函数,执行如下操作:
func f() -> Int {
switch (__WORDSIZE) {
case 32: return 1
case 64: return 2
default: return 0
}
}
Because __WORDSIZE
是一个常量,编译器总是在 switch 主体中给出至少一个警告。实际标记哪些行取决于我构建的目标(例如 iPhone 5 与 6;有趣的是,iPhone 5 针对 64 位情况给出警告,而 iPhone 6 针对 32 位和默认情况给出两个警告)。
我发现 Swift 等价于#pragma
is // MARK:
,所以我尝试了
// MARK: clang diagnostic push
// MARK: clang diagnostic ignored "-Wall"
func f() -> Int {
switch (__WORDSIZE) {
case 32: return 1
case 64: return 2
default: return 0
}
}
// MARK: clang diagnostic pop
但警告仍然存在,MARK
s 似乎没有效果。
作为解决方法,我现在有这样的东西:
#if arch(arm) || arch(i386)
return 1
#else
#if arch(arm64) || arch(x86_64)
return 2
#else
return 0
#endif
#endif
——但这当然不一样。有什么提示吗……?
目前(Xcode 7.1),似乎没有办法抑制 Swift 中的特定警告(参见例如如何快速消除警告 https://stackoverflow.com/questions/31540446/how-to-silence-a-warning-in-swift-2-0).
在你的特殊情况下,你可以通过以下方式欺骗编译器
计算数量bytes一句话:
func f() -> Int {
switch (__WORDSIZE / CHAR_BIT) { // Or: switch (sizeof(Int.self))
case 4: return 1
case 8: return 2
default: return 0
}
}
这在 32 位和 64 位体系结构上编译时不会出现警告。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)