objective-c - clang 3 中不再需要消息和函数原型(prototype)了吗?

标签 objective-c xcode warnings llvm clang

我希望以下代码生成有关函数隐式声明的警告:

@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

具体来说,我希望在声明之前收到有关使用 barbaz 的警告。 (bar 将假定返回 idbaz 将假定返回 int。)

GCC 显示这两个警告,LLVM 的 Clang 2.9 也是如此。然而,Clang 3 显然可以找出 barbaz 的存在以及它们返回的内容。 不会出现警告(除非删除这些功能)。

(当在类外部声明 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/

相关文章:

ios - 如何逐渐降低 UIButton 的不透明度?

ios - iCloud 和核心数据。 NSFetchedResultsController 不会在初始同步时更新

ios - SWIFT:我没有收到来 self 的 CloudKit 应用程序的通知?

php - 我可以用 PHP 检测和处理 MySQL 警告吗?

c++ - 从 __int64 到 size_t 的安全转换

objective-c - UIView 动画 block 与 CAAnimation

ios - Apple DemoBats 项目停止在 Swift 5 的登陆页面

swift - 尝试为 xCode 安装 Mapbox pod 会破坏现有的 pod

iOS >> ShareKit : How to Solve the Warnings in the FBRequest File?

ios - 在 iOS 中构建允许 WiFi 扬声器流式传输音乐的 RTP 服务器