Objective-CコードをCにコンパイルする方法はありますか?私は様々なものがどのように実際にで表されているのか知っていることに興味がありますが、私はアセンブリを扱うことに不快です。Objective-CコードをCにコンパイル
たとえば、メソッドはクラスとメソッド名に基づいて一意の名前を持つ関数として表され、id
型は単一のメンバ(isa
)で構造体が定義されていると読んでいます。これを見ることは可能ですか?
Objective-CコードをCにコンパイルする方法はありますか?私は様々なものがどのように実際にで表されているのか知っていることに興味がありますが、私はアセンブリを扱うことに不快です。Objective-CコードをCにコンパイル
たとえば、メソッドはクラスとメソッド名に基づいて一意の名前を持つ関数として表され、id
型は単一のメンバ(isa
)で構造体が定義されていると読んでいます。これを見ることは可能ですか?
私はObjective-CがかつてC上のプリプロセッサとして実装されていたが、それはもはやそうではないということを読んだ。ランタイムはCでアクセス可能ですが、Objective-Cコードから現代のコンパイラを使ってCコードを生成する方法はないと思います(しかし、技術的に実現可能性は高くなりません)。
しかし、その過去の遺跡はいくつかあります。 id
を右クリックしてを選択すると、定義にジャンプすると、typedefが表示されます。コードをデバッグしてオブジェクトの構造を見ると、最初のフィールドは常にスーパークラスの構造であり、すべてisa
になります。そしてApple provides documentation on the runtimeは、どのように動作するかについていくつかの洞察を与えることができます。
最適化せずにコンパイルして、適切なCデコンパイラを見つけると、部分的に有用な結果を得ることができます。
Objective C言語のほとんどは、「隠れた」構造要素を使用してObjective Cランタイムを呼び出すことで、Cコードで表現できます。
(言語の古いバージョンのための早期のマクロ・プリプロセッサの実装のいずれかがまだ存在しており、利用可能な場合は誰でも知っていますか?)
しかし、Objective-Cのコードは*、* Cのコードである、それはないですか? – BoltClock
これはCのスーパーセットです。 –
@Boltいいえ、そうではありません。 CコードはObjective-Cコードです。 – ClosureCowboy