2013-10-08 2 views
2

У меня есть массив static const char* keys[]. Могу ли я объявить массив в заголовочном файле какЯвляется ли приемлемой практикой объявлять статическую константную переменную в файле заголовка в C

static const Char* keys[] = { 
    "id", 
    "ip", // a growing array. 
} 

или должны заявления всегда быть сделаны в файле .c?

+0

Может быть использован в небольшом фрагменте кода в самом файле заголовка. –

+0

Прочитайте это два комментария: [комментарий-1] (http://stackoverflow.com/questions/13096470/static-functions-and-variables-in-c/13096505#comment17799663_13096505) и [комментарий-2] (http:// /stackoverflow.com/questions/13096470/static-functions-and-variables-in-c/13096505#comment17799882_13096505) –

+0

Итак, как мне указать указатель на статический массив здесь, если я хочу использовать его в другом файле? – mariner

ответ

0

На самом деле это определение объекта в вашем вопросе, объявление не создает экземпляры данных/классы и т. Д.
Итак, если вы переместите это определение объекта в * .c файл, вы не сможете получить к нему доступ из других источников. Это статическое влияние. Полагаю, это не то, что вам нужно.
Но если вы удаляете статическое и помещаете определение в * .c и добавляете объявление в * .h-файл, тогда вы сохраняете память для каждого include файла заголовка для размера вашего объекта (каждый из них будет указывать на одну const-структуру) ,
Теперь в вашем случае каждое включение увеличит размер вашего двоичного файла по размеру вашего объекта.

2

Я полагаю, что бы работал, но память будет выделяться для нового массива каждый раз, когда вы включаете заголовочный файл в файл C. Это означает, что у вас, вероятно, будет несколько копий одного и того же массива.

Обычный способ сделать то, что я думаю, что вы хотите:

с файла:

const char* keys[] = { 
    "id", 
    "ip", // a growing array. 
} 

ч Файл:

extern const char* keys[]; 

Таким образом, у вас есть только одно распределение памяти, и может ссылаться на это местоположение в других модулях.

Альтернативой было бы сделать массив static (ничего в файле h) и написать функции получения доступа к строкам.

Каково было ваше обоснование наличия static?

Смежные вопросы