Domanda

Anche se io sono un lungo programmatore orario C, ho da poco imparato che si può assegnare direttamente le variabili di struttura tra loro invece di usare memcpy:

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

Anche se questo si sente un po ' "alto livello" per C, è sicuramente utile. Ma perché non posso fare il confronto uguaglianza e disuguaglianza:

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

C'è qualche buona ragione per lo standard di escludere questo? O si tratta di una contraddizione in - altrimenti molto elegante - di serie?

Non vedo il motivo per cui posso sostituire il mio memcpy di per le assegnazioni pulite, ma devo mantenere quelli brutti memcmp del posto.

È stato utile?

Soluzione

Per la comp.lang.c FAQ :

  

Non v'è alcun buon modo per un compilatore   implementare confronto struttura   (Cioè per supportare l'operatore == per   strutture) che è coerente con   sapore a basso livello di C. Un semplice   byte per byte confronto potrebbe fondatore   il bit casuali presenti in inutilizzata   "buchi" nella struttura (per es   imbottitura è utilizzato per mantenere l'allineamento   di seguito campi corretti). Un confronto campo per campo potrebbe richiedere quantità inaccettabili di   codice ripetitivo per grandi strutture.   Qualsiasi confronto generato dal compilatore   Non ci si poteva aspettare per confrontare   campi puntatore giustamente in tutti   casi: per esempio, è spesso   opportuno confrontare i campi char *   con strcmp piuttosto che ==.

     

Se avete bisogno di confrontare due strutture,   dovrete scrivere la propria funzione   per farlo, campo per campo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top