manejo listas c gcc enums type-conversion gcc-warning

manejo - listas en racket



¿Cómo advertir al asignar o realizar aritmética con diferentes tipos de enumeración en GCC? (1)

Según esta respuesta , solo clang apoya el comportamiento deseado.

Hay algunos enfoques para emular enums fuertemente tipados en C, pero parecen tener varias limitaciones.

Si bien soy consciente de esto, C es válido para no diferenciar entre los tipos enum.

GCC tiene -Wenum-compare (que estoy usando) y funciona como se esperaba.

Intenté usar -Wconversion pero esto no hace ninguna diferencia.

¿Cómo pueden las asignaciones y los operadores aritméticos ( + / - / & / | ... etc) también generar advertencias? (asignación, oy ... etc.)

{ enum Foo f = SOME_VALUE; enum Bar b = SOME_OTHER_VALUE; if (f != b) { /* this warns! */ } f = b; /* <-- how to warn about this? */ f |= b; /* .. and this? */ }

Notas:

  • Cambiar a C ++ no es una opción (como se sugiere en otras respuestas) .
  • Esta pregunta está estrechamente relacionada, sin embargo no es un duplicado porque se trata de pasar argumentos en lugar de aritmética.