В области файлов я могу использовать объявление вперед в инициализированной (статической) переменной. Существует циклическая зависимость. s[0]
относится к адресу count
. count
ссылается на количество элементов в: s
.«переопределение символа без привязки» при использовании в области видимости функции
struct s { int *a; };
static int count;
int data1;
static struct s s[] = {
&count, &data1 // , ... a lot more
};
static int count = sizeof(s)/sizeof(s[0]);
Как показано в this StackOverflow question не представляется возможным использовать ту же самую конструкцию, в функции (или блок) области.
void foo(void)
{
static int count;
static struct s s[] = {
&count, &data1 // , ... a lot more
};
static int count = sizeof(s)/sizeof(s[0]);
}
Это приводит к сообщению об ошибке
redeclaration of 'count' with no linkage.
Цель состоит в том, чтобы определить, огромный набор функций, которые имеют такие таблицы. Я не хочу определять второй огромный набор переменных в области файлов. Есть ли способ определить такие переменные в области функций?
EDIT: В код не включена одна важная вещь. Я пропустил static
перед инициализированной структурой. Это важно, так как массив не должен строиться на каждом вызове.
Как вы сами исправите сферу действия? Будет ли следующая декларация перезаписывать предыдущую? – auselen
Зачем вам нужно повторно объявить 'count'? – alk
На обсуждении уровня метаданных см. Проблему XY: http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem – auselen