Перечисление типа Objective-C в файле глобальных констант - PullRequest
7 голосов
/ 27 октября 2011

ОК, это связано с вопросом "Константы в задаче C" .

Я создал Constants.h и соответствующий ему Constants.m файл:

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

// Constants.m
int const BOOKS = 66;

Мой вопрос: нормально ли для enum быть typedefConstants.h ? Код компилируется нормально (пока нет предупреждений или ошибок), но мне было интересно, если это правильный способ сделать это, так как решение, предоставленное в связанном вопросе, включает в себя разделение определения и объявления константы.

Спасибо.

1 Ответ

3 голосов
/ 27 октября 2011

ну, константа и перечисление служат разным целям (хотя есть некоторые очевидные совпадения).так что просто не уходите слишком далеко от того, что люди ожидают, если только у вас нет действительно веской причины нарушить это правило.

лично мне не очень нравится «заголовок глобальных констант», так как выобычно следует связывать эти объявления с тем, с чем они используются.например, фреймворки Apple обычно объявляют перечисления рядом с интерфейсами, к которым они относятся, и имена уведомлений в том же заголовке, что и класс.

кроме этого, вы объявили вещи правильно.

если вы используете c ++ или objc ++, то вы захотите исправить это extern, поскольку имена могут отличаться, и это может привести к ошибкам ссылок.

что-то вроде этого должно сделать свое дело:

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

тогда вы объявите BOOKS примерно так:

MONExternC int const BOOKS; 

еще одну заметку, и это может быть только для иллюстрации в вашем примере: эти идентификаторы очень короткие и могут легко вызвать коллизиис другими идентификаторами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...