Objective C est un ensemble d'extensions rétrocompatibles vers C. Cela est possible car les fonctionnalités d'Objective C sont délimitées de deux manières très simples:
- utilisation du personnage
@
. Ce caractère n'est actuellement pas utilisé dans le langage C.
- une simple extension syntaxique pour invoquer des méthodes,
[obj method:argument]
. En C, les crochets sont utilisés de manière très spécifique pour l'indexation des tableaux, et il s'agit donc d'une syntaxe C invalide. Les extensions qui reposent sur une syntaxe invalide ne modifient pas la signification de tout ce qui est valide dans la langue hôte.
Il est si facile de voir qu'aucun programme utilisant des extensions Objective C ne peut être un programme ISO C strictement conforme, aussi simple soit-il. De plus, chaque programme ISO C peut être déclaré, par définition, comme un programme Objective C valide. Objective C peut facilement suivre des développements comme C99 et C11.
D'un autre côté, C ++ n'est pas simplement des extensions de C; c'est un langage différent qui change la signification d'une partie de la syntaxe de C. C ++ et C sont maintenus séparément, et donc leur relation change avec le temps. Par exemple, C a acquis de nouvelles fonctionnalités qui sont complètement absentes en C ++, et qui n'iront probablement pas dans C ++, comme les tableaux de longueur variable C99. C ++ ne peut pas facilement saisir de nouvelles fonctionnalités C.
Si vous écrivez un programme C portable, il doit être en même temps un programme Objective C. Mais des précautions supplémentaires seront nécessaires pour qu'il s'agisse également d'un programme C ++ avec la même signification. (Cette pratique n'est pas inconnue, et le dialecte qu'elle nécessite est officieusement connu sous le nom de «C propre»).
Un exemple trivial de programme C qui s'arrête lorsqu'il est traité comme C ++ est tout programme C qui utilise un mot clé C ++ comme identificateur, tel que class
ou virtual
. L'Objectif C n'introduit aucun mot-clé réservé. Il a de nouveaux mots-clés qui sont introduits par le @
personnage, comme @interface
.