Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

130
Vistas
¿Qué significa lo siguiente con respecto a las enumeraciones en la programación C?

En un libro que estoy leyendo, las constantes de enumeración se han introducido antes que las matrices. El uso de matrices se ha demostrado solo a través de un par de ejemplos. A continuación se afirma:

 enum corvid { magpie, raven, jay, corvid_num}; char const * const bird [ corvid_num ] = { [raven] = "raven", [magpie] = "magpie", [jay] = "jay", }; for ( unsigned i = 0; i < corvid_num ; ++i) printf ("Corvid %u is the %s\n", i, bird[i]);

Esto declara un nuevo tipo de entero enum corvid para el que conocemos cuatro valores diferentes.

Para llevar: las constantes de enumeración tienen un valor explícito o posicional

Como habrás adivinado, los valores posicionales comienzan desde 0 en adelante, por lo que en nuestro ejemplo tenemos raven con valor 0, magpie con 1, jay con 2 y corvid_num con 3. Estos últimos 3 son obviamente los 3 que nos interesan.

Pregunta 1:

¿ [magpie] = "magpie" implica que la posición de la magpie se refiere al valor "magpie" .

Pregunta 2:

De acuerdo con loop, ¿cómo es bird[0] igual a "raven" , ya que esto es explícito y no un valor posicional? Además, después de la primera iteración, [i + 1] será igual a [magpie] . En general, ¿por qué el tipo de variable de bucle no está firmado y no es corvid o enum corvid?

Creo que he entendido mal las constantes de enumeración.

también de,

Como habrás adivinado, los valores posicionales comienzan desde 0 en adelante, por lo que en nuestro ejemplo tenemos raven con valor 0, magpie con 1, jay con 2 y corvid_num con 3. Estos últimos 3 son obviamente los 3 que nos interesan.

¿Tiene razón el autor al decir que el cuervo debe tener el valor 0 y no la urraca? Si se trata de un error tipográfico, se dispensará la totalidad de mi confusión.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

En la declaración char const * const bird [ corvid_num ] el elemento entre [ ] es el tamaño de la matriz. En la lista de inicializadores, [ raven ] = " raven " , el elemento entre [ ] es el llamado inicializador designado , que se usa para inicializar un elemento particular en la matriz.

Pregunta 1: ¿'[urraca] = "urraca"' implica que la posición TH de 'urraca' se refiere al valor "urraca"?

Sí.

Pregunta 2: De acuerdo con el bucle, ¿cómo es pájaro [0] igual a "cuervo", ya que esto es explícito y no un valor posicional?

Porque las enumeraciones se nombran constantes. Si a una constante de enumeración ( raven , etc.) no se le da un número de forma explícita, se le da uno implícitamente, comenzando en 0. raven en su ejemplo es el segundo elemento de la enumeración, por lo que obtiene el valor 1 y cada vez que escribe raven en el fuente será equivalente a escribir 1 .

Como habrás adivinado, los valores posicionales comienzan desde 0 en adelante, por lo que en nuestro ejemplo tenemos raven con valor 0, magpie con 1, jay con 2 y corvid_num con 3. Estos últimos 3 son obviamente los 3 que nos interesan.

Este es un error en Gustedt - Modern C . Errata podría existir? El resultado del código de ejemplo es:

 Corvid 0 is the magpie Corvid 1 is the raven Corvid 2 is the jay

En particular, si no hubiéramos usado inicializadores designados sino que hubiéramos hecho esto:

 char const * const bird [ corvid_num ] = { "raven", "magpie", "jay", };

Entonces la salida se habría convertido en cambio

 Corvid 0 is the raven Corvid 1 is the magpie Corvid 2 is the jay
over 4 years ago · Santiago Trujillo Denunciar

0

Cada caso de enum obtiene el valor del caso anterior más uno, a menos que se anule explícitamente, y el primer caso obtiene el valor cero. Así que aquí magpie es 0 , raven es 1 , etc. (La parte citada que dice lo contrario es incorrecta). El caso final corvid_num es el conteo de otros casos en la matriz, ya que el + 1 de ese caso representa el caso cero en el comienzo.

La inicialización de la matriz utiliza inicializadores designados por C99, lo que permite asignar valores a índices específicos y en cualquier orden, es decir, [raven] = "raven" inicializa el índice raven (aquí 1 ). Sería posible enumerar tradicionalmente cada valor en orden, pero hacerlo de esta manera permite reordenar los casos de enumeración sin tener que sincronizar los cambios con la matriz.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda