ऑब्जेक्टिव C, C से पिछड़े-संगत एक्सटेंशन का एक सेट है। यह संभव है क्योंकि ऑब्जेक्टिव C फीचर्स को बहुत ही सरल तरीके से सीमांकित किया जाता है:
- चरित्र का उपयोग
@। यह पात्र वर्तमान में C भाषा में उपयोग नहीं किया गया है।
- तरीकों को लागू करने के लिए एक सरल वाक्यविन्यास विस्तार
[obj method:argument]। C में, वर्ग ब्रैकेट का उपयोग सरणी सबस्क्रिप्टिंग के लिए बहुत विशिष्ट तरीके से किया जाता है, और इसलिए यह अमान्य C सिंटैक्स है। अमान्य सिंटैक्स पर निर्मित एक्सटेंशन होस्ट भाषा में मान्य किसी भी चीज़ का अर्थ नहीं बदलते हैं।
यह देखना आसान है कि कोई भी प्रोग्राम जो ऑब्जेक्टिव सी एक्सटेंशन का उपयोग नहीं करता है, वह आईएसओ सी प्रोग्राम का सख्ती से पालन कर सकता है, चाहे वह कितना भी सरल क्यों न हो। इसके अलावा, प्रत्येक आईएसओ सी कार्यक्रम को वैध उद्देश्य सी कार्यक्रम होने के लिए, परिभाषा के अनुसार घोषित किया जा सकता है। उद्देश्य C, C99 और C11 जैसे विकास का आसानी से अनुसरण कर सकता है।
दूसरी ओर, C ++ केवल C का एक्सटेंशन नहीं है; यह एक अलग भाषा है जो सी। सी ++ और सी के कुछ वाक्यविन्यास के अर्थ को अलग-अलग बनाए रखती है, और इसलिए समय के साथ उनका संबंध बदल जाता है। उदाहरण के लिए, C ने नई सुविधाएँ प्राप्त की हैं जो C ++ में पूरी तरह से अनुपस्थित हैं, और काफी संभावना C ++ में नहीं जाएगी, जैसे कि C99 चर-लंबाई सरणियाँ। C ++ नई C सुविधाओं को आसानी से नहीं उठा सकता है।
यदि आप एक पोर्टेबल सी प्रोग्राम लिखते हैं, तो यह एक ही समय में एक उद्देश्य सी कार्यक्रम होना चाहिए। लेकिन अतिरिक्त देखभाल की आवश्यकता होगी ताकि यह उसी अर्थ के साथ एक C ++ प्रोग्राम भी हो। (यह अभ्यास अनसुना नहीं है, और इसके लिए आवश्यक बोली को अनौपचारिक रूप से "क्लीन सी" के रूप में जाना जाता है)।
C ++ का इलाज करते समय टूटने वाला C प्रोग्राम का एक तुच्छ उदाहरण कोई भी C प्रोग्राम है जो C ++ कीवर्ड को पहचानकर्ता के रूप में उपयोग करता है, जैसे classया virtual। उद्देश्य सी किसी भी आरक्षित कीवर्ड का परिचय नहीं देता है। इसमें नए कीवर्ड हैं जो @चरित्र द्वारा पेश किए गए हैं, जैसे @interface।