Esta pregunta se ha hecho hasta la muerte, y estoy de acuerdo en que las enumeraciones son el camino a seguir. Sin embargo, tengo curiosidad por saber cómo compilan las enumeraciones en el código final: las definiciones # son solo reemplazos de cadenas, pero ¿las enumeraciones añaden algo al binario compilado? O ambos son equivalentes en esa etapa. Cuando escribir firmware y la memoria es muy limitado, ¿hay alguna ventaja, sin importar cuán pequeña, para usar #defines?#define vs enum en un entorno incrustado (¿Cómo compilan?)
Gracias!
EDITAR: Según lo solicitado por el comentario a continuación, por incrustado, me refiero a una cámara digital.
Gracias por las respuestas! ¡Estoy todo por enumeraciones!
"Embebido" puede significar cualquier cosa, desde un Nexus S hasta un sistema de aviónica. Debería restringirlo (qué chip, qué compilador, ¿qué versión?) Si quiere una respuesta significativa. Estoy de acuerdo con los contestadores que * deberían * ser tratados de forma similar a un 'const'. –
@Matthew: Creo que estás pensando en C++. En C, '# define' y' enum' pueden crear expresiones constantes, pero una variable 'const' nunca es una expresión constante, y para acceder a ella seguramente incurrirá en tamaño de código real y penalizaciones de rendimiento (cargando desde la memoria). –
@R, tiene razón acerca de que 'const' no es una expresión const en C99 (y necesito leer sobre esto). Pero en casos simples, el compilador aún puede evitar asignar memoria para ellos. Por ejemplo, si pongo 'const int a = 1;' en un encabezado, entonces 'int b = a;' en main, el compilador * puede * ser lo suficientemente inteligente como para no asignar memoria para 'a'. –