なぜ私は、構造体を割り当てますが、それらを比較することはできません
質問
私は長い時間のCプログラマだにもかかわらず、私はごく最近1は、代わりに、直接のmemcpyを使用しての相互に構造体変数を割り当てることができることを学びました。
struct MyStruct a,b;
...
a = b; /* implicit memcpy */
これはCのビット「高レベル」を感じているが、それは間違いなく便利です。しかし、なぜ、私は平等と不平等の比較を行うことはできません。
if (a == b) ...
if (a != b) ...
これを除外するための基準のいずれかの理由がありますか?それともこれは矛盾である - それ以外の場合は非常にエレガント - 標準?
私はきれいな割り当てのための私のmemcpyに置き換わることができますなぜ私は表示されませんが、私は場所でそれらの醜いmemcmp年代を維持する必要があります。
解決
コンパイラのための良い方法はありません 構造比較を実装します (即ち用==演算子をサポートします と一致している構造) Cの低レベルの味。シンプルな バイト単位の比較可能性の創設者 未使用の中に存在するランダムビットに 構造中の「ホール」(例えば パディングは、アライメントを維持するために使用されます 後に)正しいフィールド。フィールドごとの比較が許容できない量が必要な場合があります 大型構造物のための反復コード。 任意のコンパイラで生成された比較 比較すると予想することができませんでした すべてで適切にポインタフィールド 例:例えば、それはしばしばです CHAR *フィールドを比較することは適切で strcmpのではなく、==ます。
あなたは二つの構造を比較する必要がある場合は、 独自の関数を記述する必要があります これを行うには、フィールドごとます。
所属していません StackOverflow