Мне было интересно, если бы C имела функциональность в языке или компиляторе (gcc), чтобы я мог превратить свой int intizedized array в таблицу поиска времени comp const. Вот реконструируют моей ситуации:Таблица поиска времени компиляции в C (C11)
typedef struct Entry {
bool alive;
float a, b, c;
double d, e, f;
} Entry;
Теперь у меня есть объявление для массива:
extern const int entryCount; // Assume this is equal to an enum value.
extern const Entry entries[entryCount];
Как указывалось выше, позиция в массиве по сравнению с константой перечислений, что характерно данные помещаются в структуру ввода. Предположим, что entryCount инициализируется количеством записей в перечислении. Вот где мой вопрос, когда я инициализировать этот массив следующим образом:
const int entryCount = ENTRY_COUNT;
const Entry entries[entryCount] = {
{ false, 0.1f, 0.2f, 0.0f, 1.0, 1.0, -1.0 },
...
};
Создаются они во время компиляции и не создают накладные расходы во время выполнения? Или он выделяется в памяти во время выполнения? Потому что значения никогда не изменятся. Как я могу достичь этого в C?
Для уточнения, я предполагаю, что вы имеете в виду «если вы хотите скопировать/вставить тот же самый код объявления массива в несколько разных файлов c, он должен быть статическим»? Потому что, очевидно, вы не можете получить доступ к одной и той же переменной массива из разных файлов в случае, если это 'static'. Кроме того, на самом деле нет никакого вреда для создания постоянной глобальной и доступной из нескольких файлов. Константы не могут использоваться для создания кода спагетти.Но, конечно, вы получили бы еще одно имя в глобальном пространстве имен (что, скорее всего, не было biggie). – Lundin
Благодарим вас за быстрый ответ. Я довольно новичок в языке C, и, исходя из фона C++, «статический» немного отличается по смыслу от того, что я знаю. Я полагал, что статичность в C означает, что она доступна только в текущем блоке компиляции, это неправильно? –
@StevenFloyd Правильно, вы читали ответ так же, как я. :) В ожидании разъяснения от Йенса до того, как я перевежу. – Lundin