【问题标题】:Scope of enum itself in Objective-C?Objective-C中枚举本身的范围?
【发布时间】: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


【解决方案1】:

枚举是 C,所以我们不是在谈论任何特定于 Objective-C 的东西。


枚举不参与链接。它们只是象征性的常数。它们在可见/可访问的任何地方定义。如果那是一个编译单元,那么枚举当然只能在该编译单元内使用(但不是因为它是static、本地或其他任何东西——仅仅是因为编译器需要查看源代码(文本定义)才能成为能够扩展枚举成员。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多