que programas programacion programa partes estructura dev con componen basica c++ c struct

programas - programacion en dev c++



¿Cuál es el significado de las llaves dobles que inician una estructura en C? (3)

Inicializa todos los campos de la estructura POD a 0.

Razón fundamental:

const SomeStruct init = {Value};

Inicializa el primer campo de SomeStruct to Value, el resto de la estructura a cero (olvido la sección en el estándar, pero está en alguna parte)

Así:

const SomeOtherStruct init = {{Value}};

Inicializa el primer campo del primer campo de la estructura (donde el primer campo de la estructura es en sí mismo una estructura POD) en Valor, y el resto del primer campo en cero, y el resto de la estructura en 0.

Además, esto solo no funciona porque c ++ prohíbe la conversión implícita de tipos int enum, por lo que podría hacer:

const SomeOtherStruct init = {{TEnum(0)}};

Actualmente estoy trabajando con código C ++ heredado, compilado exitosamente con gcc 2.9.X.
Me pidieron que portara este código heredado a gcc 3.4.X. La mayoría de los errores se corrigieron fácilmente, pero este en particular me desconcierta.

El contexto :

struct TMessage { THeader header; TData data; }; struct THeader { TEnum myEnum; TBool validity; };

Lo que fue hecho :

const TMessage init = {{0}}; /* Later in the code ... */ TMessage message = init;

Mi pregunta (s) :
¿Cuál es el significado del operador {{}}? ¿Inicializa el primer campo (el encabezado ) a un 0 binario? ¿Inicializa el primer campo de la primera estructura (la enumeración ) a (literal) 0?

El error 3.4.6 que recibo invalid conversion from ''int'' to ''TEnum'' es una invalid conversion from ''int'' to ''TEnum'' , ya sea con uno o dos pares de llaves.

¿Cómo puedo configurar mi estructura en un grupo de 0 sin usar memset?

Gracias por adelantado.


Puedes considerarlo como una matriz multidimensional (si eso ayuda). A continuación, restablece dos dimensiones a 0 con ese comando. Esto funciona desde (supongo) que los valores dentro de la estructura pueden tomar 0 como valor.


  • Las primeras llaves son para struct TMessage
  • El segundo corsé es para struct THeader
  • El literal cero es para TEnum myEnum

En este caso, está inicializando TEnum con int 0 , que es una incompatible conversion .

Así que debes agregar el casting así:

const TMessage init = {{TEnum(0)}};

En C / C ++, si partially initialized estructura o la matriz (solo algunos de los primeros campos / elementos), el resto se inicializará mediante el default constructor (que es una inicialización de cero para los tipos primitivos). Se producirá un error de compilación si no hay un constructor predeterminado o si el constructor se declara private .