【发布时间】:2013-04-20 19:21:13
【问题描述】:
考虑以下代码:
enum TableSections {
kSection1 = 0,
kSection2 = 1,
};
标识符TableSections 的范围是什么?如果此代码在实现文件中,TableSections 是否仅在该编译单元中定义、全局定义或其他?
答案是特定于 Objective-C(llvm、clang 等?)还是所有 C99 或更大集合的通用答案?
【问题讨论】:
-
请注意,Clang 和 LLVM 本身都不是 ObjC 特有的。只是苹果在语言和这些工具的开发中占有很大的比重。 LLVM 是一个代码生成器,它实际上将自己的语言 (LLVM IR) 作为输入。 Clang 是处理 C、C++、ObjC 和 ObjC++ 的 LLVM 的前端。其他语言可以在传递给 LLVM 之前进行解析和翻译。
-
@JoshCaswell:好点。我倾向于忘记 Clang 和 LLVM 之间的界限在哪里。我的意思是 Clang 有特定的语言特性,而且答案可能是特定于 ObjC、Clang、C99、C 或其他一些东西似乎是合理的(尽管可能不正确)沿着这些路线分组或设置。
-
我明白了——编译器当然有可能有所作为,但我的感觉是那些(幸运的是)往往是深奥的案例。尽管有像 ObjC 集合文字语法这样的东西,它是与 Clang 一起设计的,但话又说回来,没有什么能阻止 GCC 也能够处理它。
标签: objective-c enums scope c99