Objective Cは、Cに対する下位互換性のある拡張機能のセットです。これは、Objective Cの機能が2つの非常に単純な方法で区切られているために可能です。
- キャラクターの使用
@
。この文字は現在C言語では使用されていません。
- メソッドを呼び出すための単純な構文拡張
[obj method:argument]
。Cでは、角括弧は配列の添え字に非常に特殊な方法で使用されているため、これは無効なC構文です。無効な構文に基づいて構築される拡張機能は、ホスト言語で有効なものの意味を変更しません。
Objective C拡張を使用するプログラムは、どれほど単純であっても、厳密に準拠するISO Cプログラムにはなり得ないことが簡単にわかります。さらに、すべてのISO Cプログラムは、定義により、有効なObjective Cプログラムであると宣言できます。Objective Cは、C99やC11のような開発を容易に追跡できます。
一方、C ++は単なるCの拡張ではありません。これは、Cの一部の構文の意味を変更する別の言語です。C++とCは別々に維持されるため、それらの関係は時間とともに変化します。たとえば、CはC ++にはまったくない新機能を取得しており、C99可変長配列など、C ++には組み込まれない可能性が非常に高いです。C ++は、新しいC機能を簡単に取得できません。
移植可能なCプログラムを作成する場合、それは同時にObjective Cプログラムでなければなりません。ただし、これも同じ意味のC ++プログラムになるように、さらに注意が必要です。(この慣習は前代未聞ではなく、必要な方言は非公式に「クリーンC」として知られています)。
C ++として扱われると壊れるCプログラムの簡単な例は、class
またはなどの識別子としてC ++キーワードを使用するCプログラムvirtual
です。目的Cでは、予約済みキーワードは導入されていません。の@
ようなキャラクターによって導入される新しいキーワードがあり@interface
ます。