我最近在编译 iOS 应用程序时从 LLVM GCC 4.2 切换到 LLVM 3.0 编译器。一切似乎都一样,除了我的一些 switch 语句。直接在 switch 条件中使用 Obj-C 方法似乎有问题。
我在下面创建了 main.m 文件来重现它。它正在打印 property: 846
而它应该清楚地打印 property: 2
。我对 switch 的使用有什么问题吗?或者这可能是编译器中的错误?
#import <Foundation/Foundation.h>
@interface STSomeClass : NSObject
@end
@implementation STSomeClass
- (int)mytype{
return 2;
}
- (int)someProperty{
switch ([self mytype]) {
case 1:
case 2:
case 3:
case 6:
case 8:
case 9:
return 2;
case 4:
case 7:
return 1;
default:
return 0;
}
}
- (void)printSomeProperty{
printf("property: %d\n", [self someProperty]);
}
@end
int main(int argc, char *argv[])
{
STSomeClass* someObject;
someObject = [[STSomeClass alloc] init];
[someObject printSomeProperty];
[someObject release];
}
更新:
为了弄清楚我是如何编译代码的:
- 我在 Mac OS X 10.6.8 上使用 Xcode 4.2 和 iOS SDK 5.0
- 使用 LLVM 3.0
- 使用-Os 编译代码(也试过-O1)
- 为 arvm7 构建并在装有 iOS 4.2.1 的 iPad 上进行测试(也尝试过装有 iOS 5.0 的 iPhone 4)
最佳答案
我以两种方式尝试了此代码:Xcode 4.4、llvm 4.0、ARC 和 Xcode 4.3、llvm 3,1 no-ARC 均与 OS X 10.7.3、iOS 4.3 目标和 iOS 5.0。模拟器,两次都得到“property: 2”。
所以,您的情况还有其他问题。您使用的具体配置是什么?
关于objective-c - LLVM 3.0 上 switch 语句的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9498542/