ну, константа и перечисление служат разным целям (хотя есть некоторые очевидные совпадения).так что просто не уходите слишком далеко от того, что люди ожидают, если только у вас нет действительно веской причины нарушить это правило.
лично мне не очень нравится «заголовок глобальных констант», так как выобычно следует связывать эти объявления с тем, с чем они используются.например, фреймворки Apple обычно объявляют перечисления рядом с интерфейсами, к которым они относятся, и имена уведомлений в том же заголовке, что и класс.
кроме этого, вы объявили вещи правильно.
если вы используете c ++ или objc ++, то вы захотите исправить это extern
, поскольку имена могут отличаться, и это может привести к ошибкам ссылок.
что-то вроде этого должно сделать свое дело:
#if defined(__cplusplus)
#define MONExternC extern "C"
#else
#define MONExternC extern
#endif
тогда вы объявите BOOKS
примерно так:
MONExternC int const BOOKS;
еще одну заметку, и это может быть только для иллюстрации в вашем примере: эти идентификаторы очень короткие и могут легко вызвать коллизиис другими идентификаторами.