ios - Codility 编程测试和 Objective-C 语法

标签 ios objective-c c syntax

我一直在查看 Codility 测试,( http://codility.com/ ),因为我正在考虑尝试获得证书,但我遇到了一些非常奇怪的语法错误,它似乎使用了一个稍微不同的版本从 Objective-C 到 iOS。

例如,要完成的功能是这样声明的:

int equi (NSMutableArray *A) {//.... }

相对于

-(int)equi:(NSMutableArray *)A {//... }

当我声明以下 for 循环时(ANSNumber 的数组):

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/

相关文章:

java - 我应该如何为 JNI 加载 native 库以避免 UnsatisfiedLinkError?

C - 具有非动态元素的结构的动态分配

ios - AVFoundation 相机预览层不工作

ios - 如何使用此代码在崩溃前捕获错误

ios - 我们怎样才能停止线程

objective-c - #define 是本地的(在 xcode 中)吗?

objective-c - NSSavePanel - 如何将导航截断到一个目录

ios - 在 UICollectionView 中搜索和过滤单元格

c - 构建 C 程序时出错

ios - Spritekit - 每 10 点增加持续时间