2011-10-27 10 views
7

Bien, esto está relacionado con la pregunta "Constants in Objective C".Objective-C typedef enum en el archivo de constantes globales

creé constants.h y su correspondiente Constants.m archivo:

// Constants.h 
extern int const BOOKS; 
typedef enum SSDifficultyLevel { 
    EASY = 0, 
    MEDIUM = 1, 
    HARD = 2 
} SSDifficultyLevel; 

// Constants.m 
int const BOOKS = 66; 

Mi pregunta: ¿Es bien para el enum para ser typedef 'd en constants.h? El código está compilando bien (no hay advertencias o errores hasta el momento) pero me preguntaba si esta es la manera correcta de hacerlo, ya que la solución provista en la pregunta relacionada implica dividir la definición y declaración de la constante.

Gracias.

Respuesta

3

bueno, una constante y una enumeración sirven para diferentes propósitos (aunque hay una superposición obvia). por lo tanto, no se aleje demasiado de lo que las personas esperarían, a menos que tenga una buena razón para romper esa regla.

Personalmente, no me gusta mucho el "encabezado de constantes globales", ya que generalmente debería asociar esas declaraciones con las que se usan. por ejemplo, los marcos de trabajo de Apple suelen declarar las enumeraciones cerca de las interfaces con las que se relacionan y los nombres de las notificaciones en el mismo encabezado que la clase.

Aparte de eso, ha declarado las cosas correctamente.

si usa C++ u objC++, entonces querrá reparar ese extern porque los nombres pueden diferir, y eso puede dar como resultado errores de enlace.

algo como esto debe hacer el truco:

#if defined(__cplusplus) 
#define MONExternC extern "C" 
#else 
#define MONExternC extern 
#endif 

allí tendría que declarar BOOKS así:

MONExternC int const BOOKS; 

otra nota, y esto puede haber sido sólo para la ilustración en su ejemplo: esos identificadores son muy cortos y pueden causar colisiones con otros identificadores.

+1

Hola Justin: Voy a seguir adelante y comenzar a implementar esto. Muchas gracias por su respuesta y comentarios. Agradezco su ayuda. – rtovars

Cuestiones relacionadas