我一直在查看 Codility 测试( http://codility.com/ ),因为我正在考虑尝试获取证书,但我遇到了一些非常奇怪的语法错误,它似乎使用了略有不同版本的 Objective-C IOS。
例如,要完成的函数声明如下:int equi (NSMutableArray *A) { //.... }
与-(int)equi:(NSMutableArray *)A { //... }
当我声明以下 for
循环时( A
是一个 NSNumber
数组):
12. for (int i = 0; i < [A count]; i++){
13. total = total + [[A objectAtIndex:i] intValue];
14. }
它给了我以下编译错误:
func.m:12: error: 'for' loop initial declarations are only allowed in C99 mode
func.m:12: note: use option -std=c99 or -std=gnu99 to compile your code
func.m:13: error: invalid operands to binary + (have 'double' and 'id')
如果有人可以对此有所了解,那么可能是objective-c 的版本或编译器版本不同吗?
谢谢
编辑:来自 Codility 的 @Kos 在下面发表了评论,他们最近将他们的 Objective-C 编译器切换到 Clang,这应该意味着我问的大多数问题现在都不是问题。
最佳答案
int equi (NSMutableArray *A) { //.... }
这不是“Objective-C 的不同版本”。这是一个 C 函数。
生成编译器错误是因为...
'for' loop initial declarations are only allowed in C99 mode
编译器会在一行之后告诉您解决方案:
use option -std=c99 or -std=gnu99 to compile your code
另一个可以通过强制转换来解决:
total = total + (int)[[A objectAtIndex:i] intValue];
或者,甚至更好:
total = total + [(NSNumber *)[A objectAtIndex:i] intValue];
关于ios - Codility 编程测试和 Objective-C 语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12485009/