我希望以下代码生成有关函数隐式声明的警告:
@interface TestClass : NSObject
@end
@implementation TestClass
- (void)foo {
NSString *test = [self bar];
NSLog(@"%@", test);
test = baz();
NSLog(@"%@", test);
}
- (NSString *)bar {
return @"bar";
}
NSString *baz() {
return @"baz";
}
@end
具体来说,我希望在声明之前收到有关使用 bar
和 baz
的警告。 (bar
将假定返回 id
,baz
将假定返回 int
。)
GCC 显示这两个警告,LLVM 的 Clang 2.9 也是如此。然而,Clang 3 显然可以找出 bar
和 baz
的存在以及它们返回的内容。 不会出现警告(除非删除这些功能)。
(当在类外部声明 baz
时,警告仍然会发生。因此这只适用于 Objective-C!)
太棒了!这将允许删除大量重复内容。但到底是怎么回事呢?这是语言扩展吗?它是编译器功能吗?这是一个错误吗?或者我对此有什么误解?我找不到任何相关文档,所以我对依赖它持谨慎态度。 有人有任何见解吗?
最佳答案
iOS 6 文档(现已完成 NDA)最终包含了对此功能的官方确认。
它被称为“@implementation block 中不需要转发方法原型(prototype)”,需要 Xcode 4.3 (LLVM 编译器 3.1)并与 iOS 的所有版本兼容。
Objective-C Feature Availability Index
该页面列出了编译器和 Objective-C 的所有最新改进以及它们在哪些星座下可用。
关于objective-c - clang 3 中不再需要消息和函数原型(prototype)了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9911285/