¿Cómo puedo obtener el tamaño de un miembro en una estructura en C?sizeof a struct member
struct A
{
char arr[64];
};
que necesito algo así:
sizeof (A :: arr)
gracias
¿Cómo puedo obtener el tamaño de un miembro en una estructura en C?sizeof a struct member
struct A
{
char arr[64];
};
que necesito algo así:
sizeof (A :: arr)
gracias
sizeof(((struct A*)0)->arr);
En pocas palabras, convertir un puntero nulo en un tipo de struct A*
, pero desde el operando sizeof
no se evalúa, esto es legal y le permite obtener el tamaño de los miembros de la estructura sin crear una instancia de la estructura.
Básicamente, estamos pretendiendo que existe una instancia de este en la dirección 0 y se puede usar para la determinación de offset y sizeof
.
elaborar más, lea este artículo:
Existen macros para esta construcción en Windows ('RTL_FIELD_SIZE (tipo, campo)' y Linux (' FIELD_SIZE (t, f) '). –
@Michael: No hay razón para usar macros no-portátiles específicos del sistema cuando puede escribir su propia implementación portátil con la misma facilidad. –
/* Huh, curiosamente esto no funciona con abstract structs/classes */No funciona en constantes estáticas dentro de la misma clase. –
¿Qué pasó cuando intentó 'sizeof (A :: arr)'? – pmg
@pmg 'A' no es un tipo en C –
C dijo" error de sintaxis "en respuesta a 'sizeof (A :: arr)'. C no usa dos puntos dobles en ninguna parte de su sintaxis. –