Re: 構造体のメンバの記憶域の順
新城@筑波大学情報です。こんにちは。
In article <m365kobusd.fsf@maedapc.cc.tsukuba.ac.jp>
MAEDA Atusi <maeda@cc.tsukuba.ac.jp> writes:
> キャストを使う
> struct sockaddr_in inet_addr;
> どっちも「structの先頭で同じ宣言の仕方をすれば,同じようにメンバが割り
> 付けられる」と仮定しないと動かないでしょう.
こういう時には、構造体の定義の時に、後ろへの追加を許すように
します。たとえば、こう書きます。
struct sockaddr_base {
sa_family_t sa_family ;
};
struct sockaddr_in : struct sockaddr_base {
in_port_t sin_port ;
struct in_addr sin_addr;
};
#define sin_family sa_family
あと、C#を真似してこう書くとか。
struct sockaddr_in {
sa_family_t sin_family : offset(0) ;
in_port_t sin_port : offset(2) ;
struct in_addr sin_addr : offset(4) ;
};
それから、前の記事に書いたように、XDR を使ってもいいです。ネッ
トワークに流す時には、どうせ何か標準系に変えているので、同じ
ことを、モジュール間でやってもいいでしょう。XEvent も、最後
は、TCP/IP に乗るわけだし。ソースコードがあって、賢いコンパ
イラか部分評価系があれば、XDR で標準系にするオーバヘッドはコ
ンパイル時に全部消えます。
int も、バイト数かビット数を指定できるようにして置けばよかっ
たのにね。int[4] とか、int[8] とか。
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735