2011-10-27 22 views
7

OK, questo è correlato alla domanda "Constants in Objective C".Objective-C typedef enum nel file delle costanti globali

ho creato Constants.h e il suo corrispondente Constants.m di file:

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

// Constants.m 
int const BOOKS = 66; 

La mia domanda: è ok per il enum di essere typedef 'd in Constants.h? Il codice sta compilando bene (nessun avvertimento o errore fino ad ora), ma mi chiedevo se questo fosse il modo giusto per farlo, poiché la soluzione fornita nella domanda correlata implica la divisione della definizione e della dichiarazione della costante.

Grazie.

risposta

3

beh, una costante e un enume servono a scopi diversi (anche se c'è qualche ovvia sovrapposizione). quindi, non andare troppo lontano da ciò che la gente si aspetterebbe, a meno che tu non abbia davvero una buona ragione per infrangere quella regola.

personalmente, non mi piace molto l '"intestazione delle costanti globali", poiché di solito dovresti associare quelle dichiarazioni con quello con cui sono usate. ad esempio, i framework Apple dichiarano in genere le enumerazioni vicine alle interfacce a cui si riferiscono e i nomi delle notifiche nella stessa intestazione della classe.

diverso da quello, hai dichiarato le cose correttamente.

se si utilizza C++ o objC++, allora si vorrà risolvere il problema con extern perché i nomi potrebbero essere diversi e ciò può causare errori di collegamento.

qualcosa come questo dovrebbe fare il trucco:

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

allora si sarebbe dichiarare BOOKS in questo modo:

MONExternC int const BOOKS; 

un altra nota, e questo potrebbe essere stato solo per l'illustrazione nel tuo esempio: quegli identificatori sono molto brevi e possono facilmente causare collisioni con altri identificatori.

+1

Ciao Justin: Andrò avanti e inizierò a implementarlo. Grazie mille per la tua risposta e i tuoi commenti, apprezzo il tuo aiuto. – rtovars

Problemi correlati