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
.