Objective C es un conjunto de extensiones compatibles con versiones anteriores de C. Esto es posible porque las características de Objective C están delimitadas de dos formas muy simples:
- uso del personaje
@
. Este carácter no se usa actualmente en el lenguaje C.
- una simple extensión sintáctica para invocar métodos,
[obj method:argument]
. En C, los corchetes se usan de una manera muy específica para el subíndice de matrices, por lo que esta sintaxis C no es válida. Las extensiones que se basan en una sintaxis no válida no cambian el significado de nada que sea válido en el idioma anfitrión.
Es tan fácil de ver que ningún programa que use extensiones Objective C puede ser un programa ISO C estrictamente conforme, no importa lo simple que sea. Además, cada programa ISO C puede declararse, por definición, como un programa Objective C válido. Objective C puede seguir fácilmente desarrollos como C99 y C11.
Por otro lado, C ++ no son simplemente extensiones de C; es un lenguaje diferente que cambia el significado de algunas de las sintaxis de C. C ++ y C se mantienen por separado, por lo que su relación cambia con el tiempo. Por ejemplo, C ha adquirido nuevas características que están completamente ausentes en C ++, y es muy probable que no entren en C ++, como las matrices de longitud variable C99. C ++ no puede recoger fácilmente nuevas características de C.
Si escribe un programa portátil en C, debería ser al mismo tiempo un programa Objective C. Pero se necesitará un cuidado adicional para que también sea un programa C ++ con el mismo significado. (Esta práctica no es desconocida, y el dialecto que requiere se conoce informalmente como "Clean C").
Un ejemplo trivial de un programa en C que se rompe cuando se trata como C ++ es cualquier programa en C que utiliza una palabra clave de C ++ como identificador, como class
o virtual
. El objetivo C no introduce palabras clave reservadas. Tiene nuevas palabras clave que son introducidas por el @
personaje, como @interface
.