Objective C adalah sekumpulan ekstensi yang kompatibel dengan versi sebelumnya ke C. Hal ini dimungkinkan karena fitur Objective C dibatasi dalam dua cara yang sangat sederhana:
- penggunaan karakter
@
. Karakter ini saat ini tidak digunakan dalam bahasa C.
- ekstensi sintaksis sederhana untuk memanggil metode
[obj method:argument]
,. Di C, tanda kurung siku digunakan dengan cara yang sangat spesifik untuk subskrip array, dan ini adalah sintaks C yang tidak valid. Ekstensi yang dibangun di atas sintaks yang tidak valid tidak mengubah arti dari apa pun yang valid dalam bahasa host.
Sangat mudah dilihat sehingga tidak ada program yang menggunakan ekstensi Objective C yang dapat menjadi program ISO C yang benar-benar sesuai, sesederhana apapun. Selain itu, setiap program ISO C dapat dideklarasikan, menurut definisi, sebagai program Objective C yang valid. Objective C dapat dengan mudah mengikuti perkembangan seperti C99 dan C11.
Di sisi lain, C ++ bukan hanya ekstensi ke C; Ini adalah bahasa berbeda yang mengubah arti dari beberapa sintaks C. C ++ dan C dipertahankan secara terpisah, sehingga hubungannya berubah seiring waktu. Misalnya, C telah memperoleh fitur baru yang sama sekali tidak ada di C ++, dan kemungkinan besar tidak akan masuk ke C ++, seperti array panjang variabel C99. C ++ tidak dapat dengan mudah mengambil fitur C baru.
Jika Anda menulis program C portabel, program tersebut harus sekaligus menjadi program Objective C. Tetapi perhatian tambahan akan diperlukan agar ini juga merupakan program C ++ dengan arti yang sama. (Praktik ini tidak pernah terdengar, dan dialek yang dibutuhkannya secara informal dikenal sebagai "C Bersih").
Contoh sepele dari program C yang rusak saat diperlakukan sebagai C ++ adalah program C apa pun yang menggunakan kata kunci C ++ sebagai pengenal, seperti class
atau virtual
. Tujuan C tidak memasukkan kata kunci yang dipesan. Ini memiliki kata kunci baru yang diperkenalkan oleh @
karakter, seperti @interface
.