Esto es una continuación de this question.tipos de estructuras incompatibles en moldes/asignación?
que estoy tratando de evitar el uso de una explícita typedef copiar una matriz a otra a través de moldes de esta manera:
#include <stdio.h>
int main(void)
{
int i;
int dst[] = { 10, 20, 30 }, src[] = { 1, 2, 3 };
*(struct{int _[3];}*)dst = *(struct{int _[3];}*)src;
for (i = 0; i < 3; i++) printf("%d\n", dst[i]);
return 0;
}
con gcc que estoy recibiendo arrcpy.c:8: error: incompatible types in assignment
, sin embargo con Open Watcom que compila bien (y funciona como lo espero, imprimiendo de 1 a 3).
¿El comportamiento de gcc es estándar o no? Si lo es, ¿cuál es el capítulo y la sección relevante? No puedo entender por qué dos definiciones de tipo idénticas struct{int _[3];}
no son las mismas (o compatibles) en los ojos de gcc.
EDIT: Sé muy bien que es un mal estilo de codificación. La pregunta es sobre una cosa diferente. Tengo curiosidad si hay una lógica lógica detrás del comportamiento del gcc, si es legítimo.
Si eso es posible es una pregunta. Pero es absolutamente una manera horrible de escribir el código a menos que esté preparando su presentación para la competencia ofusca C. – TJD
¿Por qué estás evitando el typedef? Ayudará a factorizar la especificación de estructura redundante. –
¿Qué pasa con 'memcpy (3)'? – sarnold