gpt4 book ai didi

objective-c - LLVM 3.0 上 switch 语句的意外行为

转载 作者:行者123 更新时间:2023-11-29 11:15:46 25 4
gpt4 key购买 nike

我最近在编译 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com