Pregunta

A pesar de que soy un largo tiempo de programador de C, que sólo recientemente aprendido que se puede asignar directamente variables de estructura entre sí en lugar de utilizar memcpy:

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

A pesar de esto se siente un poco de "alto nivel" para C, es definitivamente útil. Pero por qué no puedo hacerlo igualdad y desigualdad de comparación:

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

¿Hay alguna buena razón para el estándar de excluir esto? O se trata de una inconsistencia en el - de otra manera muy elegante - estándar?

No veo por qué puedo reemplazar mis de establecimiento de memoria para las tareas de limpieza, pero tengo que mantener a esos feos de memcmp en su lugar.

¿Fue útil?

Solución

comp.lang.c FAQ :

  

No hay una buena manera para que un compilador   para implementar la estructura de comparación   (Es decir, para apoyar el operador == para   estructuras) que es consistente con   sabor de bajo nivel de C. Un simple   byte a byte de comparación podían fundador   en bits aleatorios presentes en no utilizada   "agujeros" en la estructura (tales   el relleno se utiliza para mantener la alineación   de la tarde campos correctos). Una comparación por campo campo podría requerir cantidades inaceptables de   código repetitivo para estructuras grandes.   Cualquier comparación generado por el compilador   No se podía esperar para comparar   los punteros adecuadamente en todas las   casos: por ejemplo, es a menudo   apropiado comparar campos char *   con strcmp en lugar de ==.

     

Si es necesario comparar dos estructuras,   que tendrá que escribir su propia función   para hacerlo, campo por campo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top