Frage

Auch wenn ich eine lange Zeit C-Programmierer bin, habe ich erst vor kurzem, dass man direkt Strukturvariablen miteinander statt mit Memcpy zuweisen können:

struct MyStruct a,b;
...
a = b; /* implicit memcpy */

Obwohl dies fühlt sich ein bisschen „High-Level“ für C, es ist auf jeden Fall sinnvoll. Aber warum kann ich Gleichheit und Ungleichheit Vergleich nicht tun:

if (a == b) ...
if (a != b) ...

Gibt es einen guten Grund für den Standard dies auszuschließen? Oder ist dies eine Inkonsistenz in der - ansonsten sehr elegant - Standard?

Ich sehe nicht, warum ich meine Memcpy die für saubere Zuweisungen ersetzen, aber ich muss diese hässlichen memcmp die an Ort und Stelle halten.

War es hilfreich?

Lösung

Per comp.lang.c FAQ :

  

Es gibt keine gute Möglichkeit für einen Compiler   zu implementieren Strukturvergleich   (Das heißt der Operator == Unterstützung für   Strukturen), die mit im Einklang   C Low-Level-Geschmack. Eine einfache   Byte-für-Byte-Vergleich konnte Gründer   auf zufällige Bits in nicht genutzten   „Löcher“ in der Struktur (wie beispiels   padding wird verwendet, um die Ausrichtung zu halten   spätere Felder korrekt). Ein Feld-für-Feld Vergleich könnte inakzeptable Mengen erfordert von   repetitiver Code für große Strukturen.   Jeder Compiler generierte Vergleich   konnte nicht vergleichen zu erwarten   Zeigerfelder in geeigneter Weise in allen   Fälle: zum Beispiel, ist es oft   entsprechender char * Felder vergleichen   mit strcmp statt ==.

     

Wenn Sie zwei Strukturen zu vergleichen,   Sie werden Ihre eigene Funktion schreiben müssen   so, Feld für Feld zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top