Objective C 是一组向后兼容的 C 扩展。这是可能的,因为 Objective C 的特性以两种非常简单的方式分隔:
- 字符的使用
@
。C 语言中当前未使用此字符。
- 调用方法的简单句法扩展,
[obj method:argument]
. 在 C 中,方括号以一种非常特殊的方式用于数组下标,因此这是无效的 C 语法。建立在无效语法上的扩展不会改变任何在宿主语言中有效的含义。
很容易看出,任何使用 Objective C 扩展的程序都不能成为严格符合 ISO C 的程序,无论多么简单。此外,根据定义,每个 ISO C 程序都可以声明为有效的 Objective C 程序。Objective C 可以轻松地跟随 C99 和 C11 等开发。
另一方面,C++ 不仅仅是对 C 的扩展;它是一种不同的语言,它改变了 C 的某些语法的含义。C++ 和 C 是分开维护的,因此它们的关系会随着时间而变化。例如,C 获得了 C++ 中完全没有的新特性,并且很可能不会进入 C++,例如 C99 可变长度数组。C++ 不能轻易获得新的 C 特性。
如果您编写一个可移植的 C 程序,它应该同时是一个 Objective C 程序。但需要额外注意,使其也是具有相同含义的 C++ 程序。(这种做法并非闻所未闻,它所需的方言非正式地称为“Clean C”)。
C 程序在被视为 C++ 时中断的一个简单示例是任何使用 C++ 关键字作为标识符的 C 程序,例如class
or virtual
。Objective C 没有引入任何保留关键字。它具有由@
角色引入的新关键字,例如@interface
.