Sam*_*low 2 c syntax objective-c ios
我一直在考虑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. }
Run Code Online (Sandbox Code Playgroud)
它给了我以下编译错误:
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')
Run Code Online (Sandbox Code Playgroud)
如果有人可以对此有所了解,那么pre-the目标-c或编译器版本的版本是不同的?
谢谢
编辑:来自Codility的@Kos在下面评论过,他们最近将Objective-C编译器转换为Clang,这应该意味着我提出的大部分问题现在都是非问题.
小智 5
int equi (NSMutableArray *A) { //.... }
Run Code Online (Sandbox Code Playgroud)
这不是"Objective-C的不同版本".这是一个C函数.
生成编译器错误是因为......
'for' loop initial declarations are only allowed in C99 mode
Run Code Online (Sandbox Code Playgroud)
编译器会在稍后的一行告诉您解决方案:
use option -std=c99 or -std=gnu99 to compile your code
Run Code Online (Sandbox Code Playgroud)
另一个可以通过强制解决:
total = total + (int)[[A objectAtIndex:i] intValue];
Run Code Online (Sandbox Code Playgroud)
或者,甚至更好:
total = total + [(NSNumber *)[A objectAtIndex:i] intValue];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5254 次 |
| 最近记录: |