реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Конструктор extern класса и отладка
_Макс
сообщение Jun 7 2010, 18:09
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



Почему при старте или рестарте отладки в IAR конструктор класса extern не выполняется, и только при нажатии reset (без перезапуска отладки) выполняется содержимое конструктора класса? От чего такая логика? Вернее не выполняются вызовы методов класса.

Сообщение отредактировал _Макс - Jun 7 2010, 18:13
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 8 2010, 02:51
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(_Макс @ Jun 8 2010, 01:09) *
Почему при старте или рестарте отладки в IAR конструктор класса extern не выполняется, и только при нажатии reset (без перезапуска отладки) выполняется содержимое конструктора класса? От чего такая логика? Вернее не выполняются вызовы методов класса.

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

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

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

В общем, вы слишком мало сообщили данных, чтобы дать более-менее конкретный ответ.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 11 2010, 11:10
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



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

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


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 11 2010, 11:48
Сообщение #4


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(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" функций, в которых организовать обращение уже к функциям-членам объектов.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 12 2010, 11:02
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Понял. Спасибо!


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jun 12 2010, 15:54
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Конструкторы глобальных объектов вызываются из startup'a до вызова main. При рестарте отладки вызывается startup?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 14th July 2025 - 17:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01393 секунд с 7
ELECTRONIX ©2004-2016