新城@筑波大学情報です。こんにちは。

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] とか。

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\