Publicado el 3 comentarios

Typedef Struct

En C, el Typedef Struct es una característica que permite definir tipos de datos personalizados y estructuras de datos para organizar y manipular información de manera más eficiente y legible. Esta característica utiliza la palabra clave typedef junto con la palabra clave struct para definir una estructura con nombre propio.

Una estructura (struct) es un tipo de dato que permite agrupar diferentes variables bajo un solo nombre. Cada variable dentro de la estructura se llama «miembro» y puede ser de diferentes tipos, como enteros, flotantes, arreglos u otras estructuras. La idea detrás de las estructuras es crear un tipo de dato personalizado que contenga varios campos relacionados.

Supongamos se desea representar la información de una persona con su nombre, edad y número de identificación. Primero, se define el Typedef Struct en el área de declaraciones globales del código:

typedef struct {
  char nombre[50]; // Cadena de caracteres para el nombre
  int edad;        // Entero para la edad
  long int id;     // Entero largo para el número de identificación
} Persona;

En este ejemplo, se ha creado un Typedef Struct llamado Persona, que contiene tres miembros: nombre (una cadena de caracteres de hasta 50 caracteres), edad (un número entero) e id (un número entero largo).

Ahora se puede usar esta definición de estructura para crear variables de tipo Persona y acceder a sus miembros:

void setup() {
  Serial.begin(9600);

  // Crear una variable de tipo Persona
  Persona persona1;

  // Asignar valores a los miembros de la estructura
  strcpy(persona1.nombre, "Juan");
  persona1.edad = 30;
  persona1.id = 1234567890;

  // Mostrar la información en el monitor serial
  Serial.print("Nombre: ");
  Serial.println(persona1.nombre);
  Serial.print("Edad: ");
  Serial.println(persona1.edad);
  Serial.print("ID: ");
  Serial.println(persona1.id);
}

void loop() {
  // Nada aquí
}

En este código de ejemplo, hemos creado una variable persona1 de tipo Persona y luego hemos asignado valores a sus miembros. Finalmente, imprimimos la información en el monitor serial.

3 comentarios en “Typedef Struct

  1. Una estructura proviene del lenguaje de programación C, pero también es compatible con C++ y, por lo tanto, con Arduino. Básicamente, lo que hace es permitirnos crear una nueva variable que es una colección de información asociada con algo, como un «botón» de Simon. Esto nos permite pasar y acceder a esta información desde una única referencia.

  2. Soy un principiante en programación en C, pero me preguntaba cuál es la diferencia entre usar typedef al definir una estructura y no usar typedef. Me parece que realmente no hay diferencia, logran el mismo objetivo.

    1. El modismo común es usar ambos:
      typedef struct S {
      int x;
      } S;

      Son definiciones diferentes. Para aclarar la discusión dividiré la oración:

      estructura S {
      intx;
      };

      estructura typedef S S;

      En la primera línea está definiendo el identificador S dentro del espacio de nombres de la estructura (no en el sentido de C++). Puede usarlo y definir variables o argumentos de función del tipo recién definido definiendo el tipo de argumento como estructura S:

      void f( struct S argument ); // la estructura requerida

      La segunda línea agrega un alias de tipo S en el espacio de nombres global y, por lo tanto, le permite simplemente escribir:
      void f( S argument ); //La palabra clave struct ya no es necesaria

      Tenga en cuenta que, dado que ambos espacios de nombres de identificadores son diferentes, definir S tanto en las estructuras como en los espacios globales no es un error, ya que no se trata de redefinir el mismo identificador, sino de crear un identificador diferente en un lugar diferente.

      Para hacer la diferencia más clara:

      typedef struct S {
      int x;
      } T;

      void S() { } // correcto

      //void T() {} // error: El símbolo T ya está definido como alias de ‘estructura S’.
      Puede definir una función con el mismo nombre de estructura ya que los identificadores se mantienen en espacios diferentes, pero no puede definir una función con el mismo nombre como typedef ya que esos identificadores chocan.

      En C++, es ligeramente diferente ya que las reglas para localizar un símbolo han cambiado sutilmente. C++ todavía mantiene los dos espacios de identificador diferentes, pero a diferencia de C, cuando solo define el símbolo dentro del espacio de identificador de clase, no es necesario que proporcione la palabra clave struct/class:
      // C++
      struct S {
      int x;
      }; // S defined as a class

      void f( S a ); // correcto, la estructura es opcional

Deja una respuesta

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