Objective C é um conjunto de extensões compatíveis com versões anteriores para C. Isso é possível porque os recursos do Objective C são delimitados de duas maneiras muito simples:
- uso do personagem
@
. Este caractere não é usado atualmente na linguagem C.
- uma extensão sintática simples para invocar métodos
[obj method:argument]
,. Em C, colchetes são usados de uma maneira muito específica para subscrito de array e, portanto, esta é a sintaxe C inválida. As extensões baseadas em sintaxe inválida não alteram o significado de nada que seja válido na linguagem do host.
Tão fácil de ver que nenhum programa que usa extensões Objective C pode ser um programa ISO C estritamente em conformidade, não importa o quão simples seja. Além disso, todo programa ISO C pode ser declarado, por definição, um programa Objective C válido. Objective C pode facilmente seguir desenvolvimentos como C99 e C11.
Por outro lado, C ++ não é simplesmente extensões para C; é uma linguagem diferente que muda o significado de algumas das sintaxes de C. C ++ e C são mantidos separadamente e, portanto, seu relacionamento muda com o tempo. Por exemplo, C adquiriu novos recursos que estão completamente ausentes em C ++ e muito provavelmente não irão para C ++, como os arrays de comprimento variável C99. C ++ não pode pegar facilmente novos recursos C.
Se você escreve um programa C portátil, ele deve ser ao mesmo tempo um programa Objective C. Mas será necessário cuidado adicional para que também seja um programa C ++ com o mesmo significado. (Essa prática não é inédita e o dialeto que ela requer é informalmente conhecido como "C limpo").
Um exemplo trivial de um programa C que falha quando tratado como C ++ é qualquer programa C que usa uma palavra-chave C ++ como um identificador, como class
ou virtual
. Objective C não introduz nenhuma palavra-chave reservada. Possui novas palavras-chave que são introduzidas pelo @
personagem, como @interface
.