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

222
Vistas
La mejor manera de desactivar una bandera en C cuando se usa Enum que está firmado

Estoy tratando de usar enumeración en C para crear una variable de banderas, como se explica aquí: Banderas, enumeración (C)

¿Cómo debo restablecer un solo indicador de enumeración, cuando el compilador representa la enumeración como firmada?

Problema:

Digamos que declaro mi tipo de banderas así:

 typedef enum { FLAGS_A = 1 << 0, FLAGS_B = 1 << 1, FLAGS_C = 1 << 2, FLAGS_D = 1 << 3 } flags_t; flags_t flags;

Me gustaría restablecer una bandera como esta:

 flags |= FLAGS_A; // Set A flags &= (~FLAGS_A); // Reset A

Sin embargo, el compilador (Microchip XC8 Compiler V2.32) arroja un error porque los operadores bit a bit solo deben usarse en tipos sin firmar. Parece que la enumeración es en realidad un entero con signo debajo del capó.

Basado en esta pregunta, parece que no hay una buena manera de obligar al compilador a usar sin firmar para la enumeración: ¿Hay alguna manera de hacer que una enumeración no esté firmada en el estándar C90? (Cumple con MISRA-C 2004)

Cosas que he probado:

Una solución que encontré fue agregar una variable enumerada especial que tiene todos los demás indicadores establecidos. Puedo usar eso como una máscara para restablecer la bandera A:

 typedef enum { .... FLAGS_RESET_A = (FLAGS_B | FLAGS_C | FLAGS_D) } flags_t flag_t flags &= (FLAGS_RESET_A); // Reset A

Esta solución es engorrosa. Cada vez que modifico el tipo de banderas, como agregar una bandera, también tengo que recordar modificar todas las máscaras de reinicio. Espero que haya un método que conserve la enumeración como una "fuente única de verdad" para las definiciones de bandera.

Otra solución es la conversión de tipo a un entero sin signo, pero eso anula la seguridad de usar un tipo enumerado.

over 4 years ago · Santiago Trujillo
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