name keywords google etiquetas ejemplos c struct compare assign

c - keywords - meta tags ejemplos



¿Por qué puedo asignar estructuras pero no compararlas? (1)

A pesar de que soy un programador de C desde hace mucho tiempo, solo recientemente aprendí que uno puede asignar directamente variables de estructura entre sí en lugar de usar memcpy:

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

Aunque esto se siente un poco "de alto nivel" para C, definitivamente es útil. Pero ¿por qué no puedo hacer la comparación de igualdad y desigualdad?

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

¿Hay alguna buena razón para que el estándar excluya esto? ¿O es esto una incoherencia en el estándar, por lo demás muy elegante?

No veo por qué puedo reemplazar mis memcpy''s por asignaciones limpias, pero tengo que mantener esos feos memcmp en su lugar.


Por las preguntas frecuentes comp.lang.c :

No hay una buena forma para que un compilador implemente una comparación de estructura (es decir, para admitir el operador == para estructuras) que sea consistente con el sabor de bajo nivel de C. Una simple comparación de byte a byte podría fundarse en bits aleatorios presentes en "agujeros" no usados ​​en la estructura (dicho relleno se usa para mantener correcta la alineación de los campos posteriores). Una comparación de campo por campo podría requerir cantidades inaceptables de código repetitivo para estructuras grandes. No se puede esperar que ninguna comparación generada por el compilador compare los campos del puntero de forma apropiada en todos los casos: por ejemplo, a menudo es apropiado comparar los campos char * con strcmp en lugar de ==.

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