Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Конструктор extern класса и отладка
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
_Макс
Почему при старте или рестарте отладки в IAR конструктор класса extern не выполняется, и только при нажатии reset (без перезапуска отладки) выполняется содержимое конструктора класса? От чего такая логика? Вернее не выполняются вызовы методов класса.
dxp
Цитата(_Макс @ Jun 8 2010, 01:09) *
Почему при старте или рестарте отладки в IAR конструктор класса extern не выполняется, и только при нажатии reset (без перезапуска отладки) выполняется содержимое конструктора класса? От чего такая логика? Вернее не выполняются вызовы методов класса.

Хотелось бы узнать, что понимается под extern классом. И в каком месте что не выполняется.

Функции-члены класса - это, в общем-то, обычные функции, вызываемые обычным образом (за исключением того, что им неявно передается еще один параметр this - адрес объекта, для которого вызывается функция-член). Если у вас отладчик, так просто посмотрите в окне дизассемблера, что там реально в проце творится - имеется ли вызов функции или нет.

Еще следует иметь в виду, что к моменту вызова функции-членов объект должен быть полностью сконструирован. Поэтому играет роль то обстоятельство, где и как создается объект - в глобальной области видимости, в локальной (в функции), в свободной памяти...

В общем, вы слишком мало сообщили данных, чтобы дать более-менее конкретный ответ.
demiurg_spb
Цитата(dxp @ Jun 8 2010, 06:51) *
Функции-члены класса - это, в общем-то, обычные функции, вызываемые обычным образом (за исключением того, что им неявно передается еще один параметр this - адрес объекта, для которого вызывается функция-член).
Это правило действует всегда?
И даже для const функций-членов?

Это я к тому, что можно ли экспортировать некоторые функции класса в dll, так чтобы они были extern "C" и stdcall?
Просто понадобилось оформить стандартную либу для предоставления её клиентам, а проектик написан на плюсах.
Пока лишь почёсываю голову т.к. сроки не горят.
Спасибо за ответы:-)
dxp
Цитата(demiurg_spb @ Jun 11 2010, 18:10) *
Это правило действует всегда?

Да. На этом строится вся реализация работы функций-членов. Иначе как функция узнает, с каким именно экземпляром ей работать. Для этого и введено в язык это слово this.

Цитата(demiurg_spb @ Jun 11 2010, 18:10) *
И даже для const функций-членов?

А эти отличаются от обычных только тем, что в силу объявления не имеют права менять представления (состояния) объекта. Весь доступ ровно такой же.

Цитата(demiurg_spb @ Jun 11 2010, 18:10) *
Это я к тому, что можно ли экспортировать некоторые функции класса в dll, так чтобы они были extern "C" и stdcall?
Просто понадобилось оформить стандартную либу для предоставления её клиентам, а проектик написан на плюсах.
Пока лишь почёсываю голову т.к. сроки не горят.
Спасибо за ответы:-)

Напрямую экспортировать не удастся. Выход один - написать "обертки" в виде extern "C" функций, в которых организовать обращение уже к функциям-членам объектов.
demiurg_spb
Понял. Спасибо!
sergeeff
Конструкторы глобальных объектов вызываются из startup'a до вызова main. При рестарте отладки вызывается startup?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.