代码之家  ›  专栏  ›  技术社区  ›  jhabbott

“动态ivar”是否打破了Objective-C的“C的严格超集”范式?

  •  3
  • jhabbott  · 技术社区  · 15 年前

    谢谢你 Yuji 为了回答 another question 我指着我 this article about dynamic ivars in Objective-C .

    other question 这个 sizeof 尺寸 将不考虑来自类外的动态ivar .m 但会考虑到 .m.公司 @synthesize 创建动态ivar的声明。

    所以我的问题是,这是否打破了目标C是C的严格超集的观点?

    2 回复  |  直到 9 年前
        1
  •  7
  •   Chuck    15 年前

    不,所有有效的C代码都保持有效的Objective-C代码,它在C中的含义相同,所以Objective-C仍然是一个严格的超集。请记住,一个超集允许有一个子集中没有的特性,这就是为什么Objective-C可以拥有它所具有的所有附加功能和语法,同时保持100%的C兼容。

    这会影响到实现细节,即Objective-C类本质上是C结构类型,具有一组作用于它们的函数。注意,类似的功能 objC_setAssociatedObject() 能够 sizeof() 不能给出结构包含的所有数据的完全“准确”的概念。

        2
  •  3
  •   JeremyP    15 年前

    不。如果您通过C编译器运行Objective-C代码,它无论如何都不会编译。如果您通过Objective-C编译器运行C代码,它的行为将与您通过C编译器运行的行为完全相同(排除编译器错误)。