es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo funciona la inicialización de uniones?

El problema viene de una pregunta de ejercicio en mi libro de C.

  1. Desde el punto de vista del compilador, ¿por qué falla este código?

union id { char name[4]; long number; } var = { “Tom”, 1 };

Sé que demasiados valores de inicialización provocan un error.

Pero mi pregunta es ¿por qué se produce un error?.

¿El compilador de C simplemente cuenta el número de valores, sean cuales sean, o acepta el primer valor y devuelve un error si hay otros?

Tal vez estos dos conceptos parezcan similares, pero no son lo mismo. Si entendiste, por favor ayúdame respondiendo.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La razón por la que el código dado falla es debido a que los valores de inicialización están superando el número de miembros en la unión. En este caso, la unión “id” tiene dos miembros – un array de caracteres “name” de tamaño 4 y un entero largo “number”. Sin embargo, al inicializar la unión “var”, se proporcionan dos valores: una cadena de caracteres “Tom” y un entero 1.

    En C, el proceso de inicialización funciona mediante la coincidencia de los valores en el orden dado con los miembros de la estructura/unión. En este caso, el compilador primero intenta coincidir la cadena “Tom” con el primer miembro de la unión “name”, lo cual está bien. Sin embargo, cuando intenta coincidir el segundo valor 1 con el segundo miembro de la unión “number”, falla porque no hay más miembros para inicializar.

    Por lo tanto, el compilador da un error indicando que hay demasiados valores de inicialización. El compilador de C no cuenta el número de valores, sino que intenta coincidirlos con los miembros de la estructura/unión en el orden dado. Si hay más valores que miembros, eso resulta en un error.

Comments are closed.