アカウント名:
パスワード:
コメントされた方の多くはCとC++とを高級言語として比較されているようですが、高級アセンブラの代替としてCを使っていらっしゃる方はもういないのでしょうか?例えばC++における構造体(=クラス)のコンパイル後の記憶イメージの配置がビット単位である程度保障できるようなオプションを持つコンパイラってあるんですか?
# 他のオブジェクトがRTTIを利用したりすると何も変更がなくても影響を受けそうで。
> C++における構造体(=クラス)
クラスのように使えるよう拡張されているとはいえ、C++の構造体(struct)はクラス(class)と(いちおう)別です。
> 記憶イメージの配置がビット単位である程度保障できるような> オプションを持つコンパイラ
structならCで#pragmaやオプションで制御できる程度には、C++でも制御できると思います。
ただ、自分でアセンブラ代替として細かい操作を行う場合は、バイトオーダとかパディングの呪いを極力避けるために、CだろうがC++だろうがバイトストリームとして実装します。
特に外部装置(通信路や外付けハード、バス制御)とのやり取りの部分については。
そこまで気を使う必要が無いところは、C++でもCでも同様に書きますし...
何の説明してるんだろう。C++におけるstructとclassの違いはメンバのデフォルトスコープだけですよ。つまりstruct{...}=class{public: ...}。そしてclassであってもPOD型 [wikipedia.org]はCと互換がありますよ。じゃなきゃCとC++で共用できるヘッダファイルが書けませんて。# もちろんCにはclassがないからstructで書くことになるけど。
ていうことがわかっていれば、C++を高級アセンブラとして使えるかと。
POD Typeであればそうなんですけど、RTTIやtemplateによる型派生の関係で勝手にvirtual tableが追加されてPODでなくなるってことはないんでしょうか?
#1567512 [srad.jp] の人の答え通りなのですが、ついでに書くと、 RTTI の仕様も POD type に vtable を追加しないで済むようになっています。例えば、 dynamic_cast は原則として仮想関数を持つ構造体・クラスに対してしか使えないことになっています。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
日々是ハック也 -- あるハードコアバイナリアン
高級アセンブラの代替としてのC (スコア:1)
コメントされた方の多くはCとC++とを高級言語として比較されているようですが、
高級アセンブラの代替としてCを使っていらっしゃる方はもういないのでしょうか?
例えばC++における構造体(=クラス)のコンパイル後の記憶イメージの配置が
ビット単位である程度保障できるようなオプションを持つコンパイラってあるんですか?
# 他のオブジェクトがRTTIを利用したりすると何も変更がなくても影響を受けそうで。
Re: (スコア:0)
> C++における構造体(=クラス)
クラスのように使えるよう拡張されているとはいえ、
C++の構造体(struct)はクラス(class)と(いちおう)別です。
> 記憶イメージの配置がビット単位である程度保障できるような
> オプションを持つコンパイラ
structならCで#pragmaやオプションで制御できる程度には、
C++でも制御できると思います。
ただ、自分でアセンブラ代替として細かい操作を行う場合は、
バイトオーダとかパディングの呪いを極力避けるために、
CだろうがC++だろうがバイトストリームとして実装します。
特に外部装置(通信路や外付けハード、バス制御)との
やり取りの部分については。
そこまで気を使う必要が無いところは、C++でもCでも同様に書きますし...
Re: (スコア:1)
何の説明してるんだろう。
C++におけるstructとclassの違いはメンバのデフォルトスコープだけですよ。つまりstruct{...}=class{public: ...}。そしてclassであってもPOD型 [wikipedia.org]はCと互換がありますよ。じゃなきゃCとC++で共用できるヘッダファイルが書けませんて。
# もちろんCにはclassがないからstructで書くことになるけど。
ていうことがわかっていれば、C++を高級アセンブラとして使えるかと。
Re:高級アセンブラの代替としてのC (スコア:1)
POD Typeであればそうなんですけど、RTTIやtemplateによる型派生の関係で
勝手にvirtual tableが追加されてPODでなくなるってことはないんでしょうか?
Re:高級アセンブラの代替としてのC (スコア:2)
#1567512 [srad.jp] の人の答え通りなのですが、ついでに書くと、 RTTI の仕様も POD type に vtable を追加しないで済むようになっています。例えば、 dynamic_cast は原則として仮想関数を持つ構造体・クラスに対してしか使えないことになっています。
Re: (スコア:0)
最初期のC++言語仕様の段階でRTTIが導入されていた筈です。
vfptrが云々と言うからには、おそらく暗黙のうちに全てのクラスが
タイプ情報クラスを継承するようにコンパイルされてしまう、という様な
事を想定してるんだと思いますが、そういう事はユーザー自身でやってね、
っていうのがC++の哲学ですよ。
templateに関してはコンパイル時に全て型情報を処理してしまうので、
実行時に型情報を持ち込むような事はありませんし、もし持ち込む様な
事があれば、それはtemplateとは言いません。