Область самого перечисления в Objective-C?

Рассмотрим следующий код:

enum TableSections {
    kSection1 = 0,
    kSection2 = 1,
    };

Какова область действия идентификатора TableSections? Если этот код находится в файле реализации, TableSections определяется только внутри этой единицы компиляции, определяется глобально или что-то еще?

И является ли ответ специфичным для Objective-C (llvm, clang и т. Д.) Или общим для всего C99 или более крупного набора?

1 ответ

Решение

Перечисления являются C, поэтому мы не говорим ни о чем специфичном для Objective-C.


Перечисления не участвуют в связывании. Они просто символические константы. Они определены везде, где они видны / доступны. Если это единица компиляции, тогда enum может использоваться только внутри этой единицы компиляции (но не потому, что staticлокальный или что-то еще - просто потому, что компилятор должен видеть источник (текстовое определение), чтобы иметь возможность расширять члены перечисления.

Другие вопросы по тегам