当我没有导入时,为什么我仍然可以使用函数并从NSObject
类创建对象?
int main (int argc, char *argv[])
{
@autoreleasepool {
NSLog(@"hi");
NSArray *array = [NSArray arrayWithObject: @"hello"];
NSLog(@"%@", array);
}
return 0;
}
输出
2012-08-11 22:15:33.854 prog[1282:403] hi
2012-08-11 22:15:33.857 prog[1282:403] (
hello
)
答案 0 :(得分:8)
很可能你有一个导入Foundation的Precompiled / Prefix标头,因此Foundation会隐式添加到每个标头中。查找名为* -Prefix.pch的文件。 Xcode通常将其放在名为Supporting Files的组中。
答案 1 :(得分:0)
我试图用clang命令行编译,但是我失败了。我认为Xcode有助于编译。
% cat main.m
int main (int argc, char *argv[])
{
@autoreleasepool {
NSLog(@"hi");
NSArray *array = [NSArray arrayWithObject: @"hello"];
NSLog(@"%@", array);
}
return 0;
}
% clang main.m
main.m:4:9: warning: implicit declaration of function 'NSLog' is invalid in C99
[-Wimplicit-function-declaration]
NSLog(@"hi");
^
main.m:5:9: error: use of undeclared identifier 'NSArray'
NSArray *array = [NSArray arrayWithObject: @"hello"];
^
main.m:5:18: error: use of undeclared identifier 'array'
NSArray *array = [NSArray arrayWithObject: @"hello"];
^
main.m:5:27: error: use of undeclared identifier 'NSArray'
NSArray *array = [NSArray arrayWithObject: @"hello"];
^
main.m:6:22: error: use of undeclared identifier 'array'
NSLog(@"%@", array);
^
1 warning and 4 errors generated.