如何在Windows中编译Objective-C代码以成功执行我的代码?

时间:2013-11-13 15:45:38

标签: objective-c windows windows-xp

因此,根据此site的说明,我从GNUStep网站下载了GNUStep Windows Installer

然后我按此顺序继续安装以下的稳定版本:

GNUstep MSYS System
GNUstep Core
GNUstep Devel

然后我写下面的代码:

#import <Foundation/Foundation.h>

int main(int argc, const char *argv[]){

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSArray *funnyWords = @[@"Schadenfreude", @"Portmanteau", @"Penultimate"];

for (NSString *word in funnyWords) {
  NSLog(@"%@ is a funny word", word);
}

[pool drain];
return 0;
}

要编译代码,我尝试使用此命令:

$ gcc `gnustep-config --objc-flags` -o hello hello.m -L C:/GNUstep/GNUstep/Syst
em/Library/Libraries -lobjc -lgnustep-base

虽然这对于我写的其他代码是成功的,但这一次它给了我这些错误:

hello.m: In function 'main':
hello.m:7:23: error: stray '@' in program
hello.m:7:41: warning: left-hand operand of comma expression has no effect [-Wun
used-value]
hello.m:7:57: warning: left-hand operand of comma expression has no effect [-Wun
used-value]
hello.m:7:73: error: expected ':' before ']' token

我相信第一个错误(stray'@')可能是由于较旧的编译器,但我不知道其他错误。我查看了错误,但没有一个解决方案与我的情况有关。任何人都可以帮助Windows Objective-C编译编码器吗?

1 个答案:

答案 0 :(得分:1)

这是new syntax that has been introduced in llvm

NSArray *funnyWords = @[@"Schadenfreude", @"Portmanteau", @"Penultimate"];

检查文档以获取新语法的其他示例,该语法是为字典和数字文字定义的。

相同的旧语法是

NSArray *funnyWords = [NSArray arrayWithObjects:@"Schadenfreude", @"Portmanteau", @"Penultimate", nil];

请注意最后的nil,重要的是在那里添加旧API以了解何时停止。

关于逗号运算符的其余错误是对新语法的“误解”的结果。