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 ++ с тем же значением. (Эта практика не является чем-то необычным, и требуемый диалект неофициально известен как «Чистый C»).
Тривиальный пример программы на C, которая ломается при обработке как C ++, - это любая программа на C, которая использует ключевое слово C ++ в качестве идентификатора, например classили virtual. Objective C не вводит никаких зарезервированных ключевых слов. В нем есть новые ключевые слова, которые вводит @персонаж, например @interface.