Cで構造体の等価性をどのように比較しますか?

C には、これを行うための言語機能はありません。自分で行って、各構造体のメンバーをメンバーごとに比較する必要があります。


memcmp(&a, &b, sizeof(struct foo)) を使用したくなるかもしれません 、しかし、すべての状況で機能するとは限りません。コンパイラはアライメント バッファ空間を構造体に追加する場合があり、バッファ空間にあるメモリ位置で見つかった値が特定の値であるとは限りません。

ただし、 calloc を使用すると または memset 構造体を使用する前にフルサイズでできます 浅くする memcmp との比較 (構造体にポインターが含まれている場合、ポインターが指しているアドレスが同じ場合にのみ一致します)。


頻繁に行う場合は、2 つの構造を比較する関数を作成することをお勧めします。そうすれば、構造を変更した場合でも、比較を 1 か所で変更するだけで済みます。

それを行う方法については....すべての要素を個別に比較する必要があります