Objective C là một tập hợp các phần mở rộng tương thích ngược với C. Điều này có thể thực hiện được vì các tính năng của Objective C được phân định theo hai cách rất đơn giản:
- sử dụng ký tự
@
. Ký tự này hiện không được sử dụng trong ngôn ngữ C.
- một phần mở rộng cú pháp đơn giản để gọi các phương thức
[obj method:argument]
,. Trong C, dấu ngoặc vuông được sử dụng theo một cách rất cụ thể để lập chỉ mục mảng, và vì vậy đây là cú pháp C không hợp lệ. Các tiện ích mở rộng xây dựng trên cú pháp không hợp lệ sẽ không thay đổi ý nghĩa của bất kỳ thứ gì hợp lệ trong ngôn ngữ máy chủ.
Vì vậy, dễ dàng nhận thấy rằng không có chương trình nào sử dụng phần mở rộng Mục tiêu C có thể là một chương trình ISO C tuân thủ nghiêm ngặt, cho dù đơn giản đến đâu. Hơn nữa, theo định nghĩa, mọi chương trình ISO C đều có thể được khai báo là một chương trình Objective C hợp lệ. Objective C có thể dễ dàng theo dõi sự phát triển như C99 và C11.
Mặt khác, C ++ không chỉ đơn giản là phần mở rộng của C; nó là một ngôn ngữ khác thay đổi ý nghĩa của một số cú pháp của C. C ++ và C được duy trì riêng biệt, và do đó mối quan hệ của chúng thay đổi theo thời gian. Ví dụ: C đã có được các tính năng mới hoàn toàn không có trong C ++ và rất có thể sẽ không có trong C ++, chẳng hạn như mảng độ dài thay đổi C99. C ++ không thể dễ dàng chọn các tính năng C mới.
Nếu bạn viết một chương trình C di động, nó phải đồng thời là một chương trình C Objective. Nhưng sẽ cần thêm sự cẩn thận để nó cũng là một chương trình C ++ có cùng ý nghĩa. (Thực tiễn này không phải là chưa từng được biết đến và phương ngữ mà nó yêu cầu được biết đến một cách không chính thức là "Clean C").
Một ví dụ đơn giản về chương trình C bị hỏng khi được coi là C ++ là bất kỳ chương trình C nào sử dụng từ khóa C ++ làm số nhận dạng, chẳng hạn như class
hoặc virtual
. Objective C không giới thiệu bất kỳ từ khóa dành riêng nào. Nó có các từ khóa mới được giới thiệu bởi @
nhân vật, như @interface
.