>>22
構造体同士の代入は出来ても比較が出来ないのは、
アラインメントを合わせるためにパディングされている場合があるから。

それを強引にmemcmpで比較したところで、その部分に何が入ってるかが分からないのだから
比較結果は環境依存になる。

つまり、charが1バイト、intが4バイト、アラインメントが4バイトだと仮定すると
struct hoge {char a; int b;};
は
struct hoge {char a; char pad[3]; int b;};
と同じような構造体のマップになる。
んで、memsetで初期化した場合を除けばpadの部分に何が入ってるかが分からないから
e,f,gはtrueにもfalseにもなりうる。