目标C是对C的一组向后兼容扩展。之所以可行,是因为目标C的功能以两种非常简单的方式来界定:
- 角色的使用
@
。该字符当前不在C语言中使用。
- 调用方法的简单语法扩展
[obj method:argument]
。在C语言中,方括号用于数组下标的方式非常特殊,因此这是无效的C语法。以无效语法为基础的扩展名不会更改宿主语言中任何有效内容的含义。
很容易看出,无论多么简单,使用Objective C扩展的程序都不能成为严格符合ISO C的程序。而且,根据定义,每个ISO C程序都可以声明为有效的Objective C程序。目标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
或virtual
。目标C不引入任何保留关键字。它具有由@
字符引入的新关键字,例如@interface
。