C には標準 ABI がありますか? 質問する

C には標準 ABI がありますか? 質問する

議論からどこか別の場所:

C++には標準のABI(アプリケーションバイナリインターフェース)がない

しかし、C もそうではないですよね?

どのプラットフォームでも、ほぼその通りです。言語間のコミュニケーションの共通言語として、共通言語がなければ役に立ちません。

これについてどう思いますか?

ベストアンサー1

C では ABI は定義されていません。実際、C では ABI の定義を回避するためにあらゆる手段を講じています。私のように、8 ビット バイト、2 の補数演算、フラット アドレス空間を備えた 16/32/64 ビット アーキテクチャで C プログラミングにほとんどの時間を費やしてきた人は、現在の C 標準の複雑な言語を読んで、かなり驚くことでしょう。

たとえば、ポインターに関する内容を読んでください。標準では、「ポインターはアドレスである」というような単純なことは何も述べられていません。それは ABI についての仮定となるからです。特に、ポインターが異なるアドレス空間に存在し、さまざまな幅を持つことを許可しています。

ABI は、言語の実行モデルから特定のマシン/オペレーティング システム/コンパイラの組み合わせへのマッピングです。言語仕様で ABI を定義するのは意味がありません。一部のアーキテクチャで C 実装が除外されるリスクがあるからです。

おすすめ記事