The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

9.6 Упражнения

9.6 Упражнения

Предыдущая  Содержание  Следующая V*D*V

Макрос Class() является более эффективным, переносимым решением для автоматической инициализации описаний классов, чем использование функций. Это реализовано изменением отчётов, определений классов и прикладных программ так, как описано выше.

munch, вероятно, придётся адаптировать к новой системе. Для выпускаемой версии системы мы можем при использовании совместно с макросом Class() удалить условие из макроса и инициализировать все описания класса с помощью munch. Как проинициализировать всё в правильном порядке? Может ли помочь здесь использование ooc (справьтесь в руководстве в приложении C об опции -M для ooc)? Что можно сказать о cast() в выпускаемой версии системы?

Все описания классов должны сначала обнаружиться в вызовах cast(). Мы можем определить поддельный класс

 

typedef const void * (* initializer) (void);

 

% Class ClassInit: Object {

    initializer init;

%}

 

и использовать статически инициализируемые экземпляры как "неинициализированные" описания классов:

 

static struct ClassInit _Point = {

    { MAGIC, 0 }, /* Объект без описания класса */

    initPoint     /* функция инициализации */

};

 

const void * Point = & _Point;

 

cast() может теперь обнаружить описание класса с нулевым указателем описания класса, предположить, что это struct ClassInit, и вызвать функцию инициализации. Хотя это решение сокращает количество ненужных вызовов функции, как это повлияет на использование cast()?

 

Предыдущая  Содержание  Следующая