在 @protocol 前加上 static 关键字

3

可以像这样编写代码:

static @protocol MyProtocol <NSObject>    
...    
@end

并且它已经成功编译。
为什么没有错误?编译器如何解释static关键字?


在逻辑上,将协议显式地设置为“静态”是没有意义的,因为它们已经在抽象层面上是一种“静态”的接口声明(但我会谨慎地在这里使用“静态”一词,因为它也与 C 语言关键字匹配)。 - holex
1
好的,但是为什么没有错误?编译器只是不知道该怎么处理它吗?还是怎么回事? - Mikhail
我不确定你实际上期望什么样的错误?而且为什么要期望错误?协议已经是“静态”接口声明,你无法将它们设置为“双重静态”或“非静态”;因此,如果你在代码中明确写入 static(或 constinlinevolatile 等关键字...),逻辑上这些关键字都没有意义,因为协议不是运行时对象,你从逻辑上根本没有产生任何区别。因此,在这种情况下不会发生任何错误,但你可以把这视为编译器不会介意并优雅地忽略这些。 - holex
1个回答

4

很明显,你无法指定协议的存储类别,因为这是没有意义的,所以它会被默默忽略。


@CHiP-love-NY 不是真的;不是。就像我说的,编译器只是忽略了存储类别说明符。 - trojanfoe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接