¿Por qué la estructura vacía tiene un tamaño de 1 byte en C++ pero 0 byte en C?

Una estructura es un tipo de datos definido por el usuario en C/C++ . Una estructura crea un tipo de datos que se puede usar para agrupar elementos de tipos posiblemente diferentes en un solo tipo. La palabra clave ‘struct’ se utiliza para crear una estructura. La sintaxis general para crear una estructura es la siguiente:

Sintaxis-

struct structureName{
    member1;
    member2;
    member3;
    .
    .
    .
    memberN;
};

Las estructuras en C++ pueden contener dos tipos de miembros: 

  1. Miembro de datos :  estos miembros son variables normales de C++ . Se puede crear una estructura con variables de diferentes tipos de datos en C++.
  2. Funciones miembro :  estos miembros son funciones normales de C++ . Junto con las variables, las funciones también se pueden incluir dentro de una declaración de estructura.

Declaración del problema: ¿Por qué el tamaño de una estructura vacía no es cero en C++ sino cero en C ?

Solución:
A continuación se muestra el programa C con una estructura vacía:

C

// C program with an empty
// structure
#include <stdio.h>
 
// Driver code
int main()
{
    // Empty Structure
    struct empty {
    };
 
    // Initializing the Variable
    // of Struct type
    struct empty empty_struct;
 
    // Printing the Size of Struct
    printf("Size of Empty Struct in C programming = %ld",
           sizeof(empty_struct));
}
Producción

Size of Empty Struct in C programming = 0

A continuación se muestra el programa C++ con una estructura vacía:

C++

// C++ program to implement
// an empty structure
#include <iostream>
using namespace std;
 
// Driver code
int main()
{
    // Empty Struct
    struct empty {
    };
 
    // Initializing the Variable
    // of Struct type
    struct empty empty_struct;
 
    // Printing the Size of Struct
    cout << "Size of Empty Struct in C++ Programming = " << sizeof(empty_struct);
}
Producción

Size of Empty Struct in C++ Programming = 1

Si se observa detenidamente, se ejecuta el mismo código en C y C++, pero la salida es diferente en ambos casos. Discutamos la razón detrás de esto-

  1. El estándar C++ no permite objetos (o clases) de tamaño 0. Esto se debe a que haría posible que dos objetos distintos tuvieran la misma ubicación de memoria. Esta es la razón detrás del concepto de que incluso una clase y una estructura vacías deben tener un tamaño de al menos 1. Se sabe que el tamaño de una clase vacía no es cero. Generalmente, es de 1 byte. Las Estructuras de C++ también siguen el mismo principio que las Clases de C++, es decir, que las estructuras en c++ tampoco serán de cero bytes. El tamaño mínimo debe ser de un byte.
  2. Crear una estructura vacía en C/C++ es una violación de restricción sintáctica. Sin embargo, GCC permite una estructura vacía en C como extensión. Además, el comportamiento no está definido si la estructura no tiene ningún miembro con nombre porque:

C99 dice 
: si struct-declaration-list no contiene miembros con nombre, el comportamiento no está definido.

Esto implica- 

// Constraint Violation
struct EmptyGeeksforGeeks {};

// Behavior undefined, 
// since there is no named member
struct EmptyGeeksforGeeks {int :0 ;}; 

Publicación traducida automáticamente

Artículo escrito por iamsamyak y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *