Здравствуйте, Уважаемый All!
Столкнулась в С с непреодолимой задачей инициализации переменых. Речь идет о создании списка из узлов диалога. Список известен заранее, его не надо формировать динамически, а требуется просто поиметь как список из констант, например во флэш. Раньше на макроассемблере эта задачка решалась в пять секунд.
RSEG FLASH_SEGMENT
Node1: dw Node2 ; это элемент Next db <......> ; тело узла #1 диалога
Node2: dw Node3 ; это элемент Next db <......> ; тело узла #2 диалога
;---и так далее
Макроассемблер двупроходный и поэтому ссылки из Node1 на Node2, который определяется ниже, нормально разрешаются. А теперь пытаемся изобразить то-же самое на С. Определяем структуры TNode и вводим как CONST ряд таких переменных с именами Node1 и Node2. При попытке произвести инициализацию полей этих структур, компилятор посылает нафиг, якобы Node2, на которую поставлена ссылка при инициализации Node1, не декларирована! Понимаю, что речь идет о идентификаторе, который появляется ниже по тексту. Пытаюсь намекнуть компилятору, что это EXTERN- он посылает, т.к. для CONST не бывает EXTERN. Все, цикл замкнулся. Hеужели мне придется отказаться от CONST и начальной инициализации списка? Hеужели придется обьявить все переменными и программно заполнять поля громадного списка? Прошу дать дельные рекомендации. А то мой энтузиазм в отношении Си начинает угасать. Ниже привожу фрагмент, который никак не удается реализовать, как список из констант.
Всего Вам Хорошего Ольга
struct TNode { const struct TNode * Up; const struct TNode * Down; const struct TNode * Left; const struct TNode * Right; };
const struct TNode Node1= (Node2,NULL,NULL,NULL}; //ошибка выдается здесь
const struct TNode Node2= {Node1,NULL,NULL,NULL}; // а здесь проходит нормально