【发布时间】:2013-05-07 22:24:35
【问题描述】:
在Clang documentation for ARC 中,它说:
ARC 适用于 Objective-C 指针类型、块指针类型和 [开始 Apple 8.0,LLVM 3.8] 在 extern "BCPL" 中声明的 BPTR 块。
这些“在外部“BCPL”块中声明的 BPTR 是什么?
【问题讨论】:
标签: objective-c automatic-ref-counting llvm clang bcpl
在Clang documentation for ARC 中,它说:
ARC 适用于 Objective-C 指针类型、块指针类型和 [开始 Apple 8.0,LLVM 3.8] 在 extern "BCPL" 中声明的 BPTR 块。
这些“在外部“BCPL”块中声明的 BPTR 是什么?
【问题讨论】:
标签: objective-c automatic-ref-counting llvm clang bcpl
这是一个小笑话。
C++ 能够使用 C 链接标记标识符,这通常意味着不会对具有相同名称但参数签名不同的函数进行名称修改,因为直到最近,C 还没有重载的概念1.
您指定链接的方式是将标识符括起来:
extern "C" {
whatever ...
}
现在,BCPL 是一种甚至早于 C 的语言(它实际上是 C 谱系的一部分),它的“链接”(因为缺少更好的词)只是一个称为全局向量的地址表。
您引用的该文档的作者只是幽默,CLang 实际上并没有提供 extern "BCPL" 的东西。您还会注意到 LLVM 的当前版本是 3.2,而 3.3 直到今年 6 月才发布。另一个迹象表明作者正在让我们继续,LLVM 3.8 评论。
由于该句子的意图只是显示注释(在[] 内)的工作原理,因此文本的其余部分在很大程度上是无关紧要的。
1随着 C11 中类型泛型表达式的引入,它现在具有某种重载,尽管在编译时而不是运行时完成。
【讨论】:
这行显然是从未知上下文中随机抽取的,只是为了演示修订标记,例如 [beginning Apple 8.0, LLVM 3.8],并且 BPTR 和 BCPL 并不意味着任何特定的东西。一般来说,BPTR的意思是字节指针。
【讨论】: