Objective C è un insieme di estensioni compatibili con le versioni precedenti di C. Ciò è possibile perché le funzionalità Objective C sono delimitate in due modi molto semplici:
- uso del personaggio
@ . Questo carattere non è attualmente utilizzato nel linguaggio C.
- una semplice estensione sintattico per invocare metodi
[obj method:argument]. In C, le parentesi quadre vengono utilizzate in un modo molto specifico per l'indice degli array, e quindi questa non è una sintassi C non valida. Le estensioni che si basano su una sintassi non valida non cambiano il significato di tutto ciò che è valido nella lingua host.
È così facile vedere che nessun programma che utilizza le estensioni Objective C può essere un programma ISO C strettamente conforme, non importa quanto semplice. Inoltre, ogni programma ISO C può essere dichiarato, per definizione, un programma Objective C valido. L'obiettivo C può seguire facilmente sviluppi come C99 e C11.
D'altra parte, C ++ non è semplicemente un'estensione di C; è un linguaggio diverso che cambia il significato di alcune delle sintassi di C. C ++ e C vengono mantenuti separatamente, e quindi la loro relazione cambia nel tempo. Ad esempio, C ha acquisito nuove funzionalità che sono completamente assenti in C ++ e molto probabilmente non entreranno in C ++, come gli array C99 a lunghezza variabile. Il C ++ non può acquisire facilmente nuove funzionalità C.
Se scrivi un programma C portatile, dovrebbe essere allo stesso tempo un programma Objective C. Ma sarà necessaria ulteriore attenzione in modo che sia anche un programma C ++ con lo stesso significato. (Questa pratica non è inaudita, e il dialetto che richiede è informalmente noto come "Clean C").
Un banale esempio di un programma C che si interrompe se trattato come C ++ è qualsiasi programma C che utilizza una parola chiave C ++ come identificatore, come classo virtual. L'obiettivo C non introduce parole chiave riservate. Ha nuove parole chiave che vengono introdotte dal @personaggio, come @interface.