In article <3CF61172.66A775CB@xxxxxxxxxxxxx>, (*_*) Masahiro Ochiai <user@xxxxxxxxxxxxx> wrote: > >確かにgcc-2.95.3はそうなりますね。この構造体ですが、 > > unsigned char : 0; > >っておかしくないですか? 0ビットを割り当てる? >ダミーで1ビットスキップさせるのなら > > unsigned char : 1; > >になると思うのですが...やってみたらうまくコード生成できました。それが原因では? > たぶん :1 の間違いなんでしょうけれど、 :0としたばあい、設定によってアラインメントを調整する働きがあるようです。 H8/300のですと、gcc/config/h8300/h8300.h で /* Alignment of field after `int : 0' in a structure. */ /* One can argue this should be 32 for -mint32, but since 32 bit ints only need 16 bit alignment, this is left as is so that -mint32 doesn't change structure layouts. */ #define EMPTY_FIELD_BOUNDARY 16 となっていますので、元記事の動作はコンパイラのバグでは無く 正しい動作であると言えると思います(上のコメントではintになってますが、 実際には型はなんでも同じみたいな気がします)。 -- ----_--__---_-_-_-__--_-__-__---_-_----_--_-_---_---_---- _/ TANAKA Yoshitomo _// / Suginami-ku Tokyo, Japan _// serow@xxxxxxxxxxxxxxxxxx