возврат из подпрограмм

Jun 04, 2006 Last reply: 19 years ago 3173 Replies

 X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Nickita A Startcev! You wrote in conference fido7.ru.embedded to Kirill Frolov on Thu, 24 Aug

2006 13:56:16 +0400:

JA>>>>> Hе знаю, возможно-ли вообще профессиональное решение с JA>>>>> применением очень простого (простейшего!) класса работы с JA>>>>> COM-портом. DT>>>> Вот-вот, давайте не будем путать разные задачи. >>> С одной стороны - да. А с другой стороны, если есть задаваемый >>> параметр величины таймаута в мс, то хотелось бы, чтобы эти "мс" >>> выдерживались по-возможности точно. Думаю, что решение, например, ~~~~~~~~~~~~~~~~~~~~~ >>> предложенное Димой,

KF>> Для этого нужна ОС реального времени. Вроде QNX. Или хоть линух KF>> который с патчем.

NA> Или ядрёный драйвер под "любую" OS. :)

Ничего этого, как показала практика, не нужно. Для просветления медитируй над подчеркнутой фразой.

dima

formatting link

Привет!

Thu Aug 24 2006 19:59, Dmitry Orlov wrote to Jurgis Armanavichius:

Вот и я удивился :-)

Юргис

Привет!

Thu Aug 24 2006 10:40, George Shepelev wrote to Jurgis Armanavichius:

JA>> Hесогласие с вашим бредом - это хамство? Хм... Hе знал... Прошу JA>> прощения. Подскажите тогда правильное слово, которым я мог бы JA>> охарактеризовать ваши высказывания. А то мне на ум приходят только JA>> такие: бред, чушь, чепуха... GS> Стёб? ;)

А то! Тут ведь как? Лето заканчивается, дожди начались... Хочется напоследок повеселиться... Осень ведь приближается... :-)

Юргис

В цитированном письме ни про какую мб разговора не было. При том что и "PC-совместимая мб"

- вещь тоже мало осмысленная, особенно если учесть что PC-совместимой систему делает именно мб. Масло маслянное по русски называется. Хотя и употребляется. Вон у известного радетеля за чистоту терминов ДО - вопросов не возникло.

Я понимаю что для тебя если чего то ты не видишь, то этого как бы и не существует, но поверь что это не совсем так - Африка таки существует, и Австралия и Антарктидой. А new и delete - есть - только вот данный язык (в отличии от например java) - решил их вызвать для тебя сам.

 X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Arcady Schekochikhin! You wrote in conference fido7.ru.embedded to Jurgis Armanavichius on Fri, 25 Aug 2006 06:07:34 +0000 (UTC):

AS> Я понимаю что для тебя если чего то ты не видишь, то этого как бы и AS> не существует, но поверь что это не совсем так - Африка таки AS> существует, и Австралия и Антарктидой. А new и delete - есть -

А кто говорил, что их нет? Только то, что при создании/удалении с их помощью объектов вызываются конструктор и деструктор не означает, что конструктор и деструктор надо вызывать руками и именно это иллюстрируют примеры статически или автоматически созданных объектов, где никаких new/delete не нужно, а конструктор и деструктор вызываются.

AS> только вот данный язык (в отличии от например java) - решил их AS> вызвать для тебя сам.

Бред. Нет никих new/delet при создании/уничтожении статических и автоматических объектов. Как говорит Ольга Нонова (tm) коллектив - позорище.

dima

formatting link

Привет!

Fri Aug 25 2006 10:05, Arcady Schekochikhin wrote to Jurgis Armanavichius:

Звиняйте. Я беседовал с коллегой, который превосходно осведомлен о контексте и знает, что я говорю именно о "материнке". Hе могу же я на самом деле в _каждом_ письме приводить подробную спецификацию своей системы! :-)

Если же кому-то другому стала интересна обсуждаемая тема, то он пройдется по треду или заглянет в архивы и поймет, о чем речь. Если же и в архивах ничего нет - просто спросит в конце концов.

Так что, я с тобой не согласен.

AS> При том что и "PC-совместимая мб" - вещь тоже мало осмысленная, AS> особенно если учесть что PC-совместимой систему делает именно мб. AS> Масло маслянное по русски называется. Хотя и употребляется.

Чиво? PC-совместимая мб - вещь мало осмысленная? Это как? По-моему, если "мама" PC-совместимая, то все сразу понятно: на ней может быть запущена Винда или Линукс (некоторые другие системы в данном случае неинтересны). Какое тут масляное масло? Ведь система вполне может быть (и бывает) отнюдь не PC-совместимая. Или ты о чем-то другом?

Кстати, утверждение "PC-совместимой систему делает именно мб" IMHO является ложным. Т.к. Термин "материнская плата" ничего не говорит о том, для PC она разработана или для какого-нить интеллектуального станка, ничего общего с PC не имеющего. Это универсальный термин, который вполне можно заменить словами "основная плата".

Юргис

Привет!

Fri Aug 25 2006 10:07, Arcady Schekochikhin wrote to Jurgis Armanavichius:

Hичего не понял... Это ты, типа, что-то умное сказал? Тогда я - пас. В глубокие дискуссии на эту тему Африки или Антарктиды я не вступаю за полной ненадобностью.

Однако, хотел бы напомнить, о чем шла речь. Я говорил, что мне нравится в ООП его автоматический вызов деструкторов. Hа это Кирилл заявил, что деструктор автоматически не вызывается. И понеслась :-)

=========== begin =========== >> KF> А деструктор -- он самим Биллом Гейтсом вызывается что ли? >> KF> Автоматически... >> А ты что, деструктор вручную вызываешь?! Удивительно! А зачем?! :-) KF> А кто его будет вызывать? Полагаю, что компилятор сам вставит вызов деструктора при уничтожении объекта. >> Я вот, например, только на его автоматический вызов полагаюсь (т.е. >> именно при уничтожении объекта) и руками не вызываю. Религия?... KF> HЕт. delete кто делать будет? Автомагически... ============ end ============

Так вот. Hафига он delete сюда приплёл - я не знаю, я о нем вовсе не говорил. Я говорил про автоматический вызов деструкторов, а они вызываются именно автоматически вне зависимости от того, автоматические объекты или динамические. Ведь даже написав:

delete MyObject;

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

Следи за контекстом, иначе тебе будет на самом деле непонятно, о чем люди спорят.

Юргис

Привет Arcady!

25 Aug 06 10:07, Arcady Schekochikhin писал Jurgis Armanavichius:

AS> А new и delete - есть - только вот данный AS> язык (в отличии от например java) - решил их вызвать для тебя сам.

alx2% cat test.cpp #include <iostream>

class A { public: A(void) { std::cout << "A called" << std::endl; } ~A(void) { std::cout << "~A called" << std::endl; } void * operator new(size_t x) { std::cout << "new called" << std::endl; return ::new char[x]; } void operator delete(void *p) { std::cout << "delete called" << std::endl; ::delete[] (char*)p; } };

int main(void) { A a; A *ap = new A; delete ap; return 0; } alx2% g++ -o t test.cpp alx2% ./t A called new called A called ~A called delete called ~A called

А вот для меня он сам вызывать не стал. :)

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Если ты коп, почему я весь взмок?

Здравствуйте, Уважаемый Alex!

Fri Aug 25 2006 16:31, Alex Mogilnikov wrote to Arcady Schekochikhin:

AM> int main(void) AM> { AM> A a; AM> A *ap = new A; AM> delete ap; AM> return 0; AM> } AM> alx2% g++ -o t test.cpp AM> alx2% ./t AM> A called AM> new called AM> A called AM> ~A called AM> delete called AM> ~A called

AM> А вот для меня он сам вызывать не стал. :)

Это одно из принципиальных отличий в способах создания экземпляров класса. Если создавали с выделением памяти динамически оператором new (аналог malloc), то такой обьект автоматически не удаляется при закрытии приложения. Где-то обязательно нужно будет вызвать delete, которое освободит память. Это большими буквами вещалось всем юзерам ООП на "PC-образных платах" еще во времена TP-8. Странно, наш литовский друг должен был то время застать в здравом уме и теперь не говорить глупостей с умным видом.

В последнее время, когда появились кристаллы с памятью частично во flash, а частично в SRAM, например LPC с ARM7, проявилась другая принципиальная особенность в способах создания экземпляров класса. Если статически создаете обьект, то компиляторы C++ помещают его методы во flash, а если динамически с использованием new, то весь обьект целиком идет в SRAM. Поскольку памяти на данные в таких кристаллах маловато, то могут возникнуть большие проблемы прямо во время эксплуатаци прибора.

Всего Вам Хорошего Ольга

Здравствуйте, Уважаемый Pasha!

Fri Aug 25 2006 00:45, Pasha Popov wrote to Olga Nonova:

ON>> так, -1. автоматически при его декларации:

ON>> Some_class my_foo;

ON>> или -2.вот так, динамически выделяя память под него в процессе хода ON>> программы:

ON>> Some_class *my_foo = new(Some_class());

PP> Hу так что, в первом случае конструкторы и деструкторы вызываться не PP> будут? :))

Будут. Hо только конструкторы и деструкторы по умолчанию. Такие на практике нафиг никому не нужны. А нужна осмысленная инициализация данных обьекта и в заключении -осмысленные действия по их сохранению.

Всего Вам Хорошего Ольга

AM>> int main(void) AM>> { AM>> A a; AM>> A *ap = new A; AM>> delete ap; AM>> return 0; AM>> } AM>> alx2% g++ -o t test.cpp AM>> alx2% ./t AM>> A called AM>> new called AM>> A called AM>> ~A called AM>> delete called AM>> ~A called ON>

AM>> А вот для меня он сам вызывать не стал. :) ON>

ON> Это одно из принципиальных отличий в способах создания экземпляров класса. ON> Если создавали с выделением памяти динамически оператором new (аналог ON> malloc), ON> то такой обьект автоматически не удаляется при закрытии приложения. Где-то ON> обязательно нужно будет вызвать delete, которое освободит память. Это ON> большими ON> буквами вещалось всем юзерам ООП на "PC-образных платах" еще во времена ON> TP-8. ON> Странно, наш литовский друг должен был то время застать в здравом уме и ON> теперь ON> не говорить глупостей с умным видом. ON>

ON> В последнее время, когда появились кристаллы с памятью частично во flash, а ON> частично в SRAM, например LPC с ARM7, проявилась другая принципиальная ON> особенность в способах создания экземпляров класса. Если статически ON> создаете ON> обьект, то компиляторы C++ помещают его методы во flash, а если динамически ON> с ON> использованием new, то весь обьект целиком идет в SRAM. Поскольку памяти на ON> данные в таких кристаллах маловато, то могут возникнуть большие проблемы ON> прямо ON> во время эксплуатаци прибора.

что-то мутное

а зачем методы в SRAM пихать-то? это что за компиляторы такие уродливые?

Michael, ты ещё здесь сидишь?

Понедельник Август 21 2006 21:08, Michael Mamaev wrote to Dimmy Timchenko:

DT>> Hе пpедставляю, как с ООП может быть пpоще. :) По-моемy, его DT>> пpидyмали, чтоб пpогpаммы мышкой писать. ;) MM> ООП не для эхотага пpосто.

От задач зависит! Бывают случаи, когда "объектно-ориентированный" подход и в эхотаге даёт существенный выигрыш (тот-же Форт весь выстроен на "объектных" концепциях)...

Георгий

Arcady, ты ещё здесь сидишь?

Четверг Август 24 2006 11:05, Arcady Schekochikhin wrote to Jurgis Armanavichius:

Hу, не совсем бессмысленный, я бы сказал - малоинформативный...

Георгий

Jurgis, ты ещё здесь сидишь?

Четверг Август 24 2006 18:24, Jurgis Armanavichius wrote to Arcady Schekochikhin:

Так и называй - "PC-совместимая МАТЕРИHСКАЯ плата".

JA> Честно говоря, я был абсолютно уверен, что такая плата называется JA> PC-совместимой...

Плата с однокристаллкой, втыкаемая в разъём LPT, тоже может являться PC-совместимой. И при этом вполне может функционировать, будучи подключенной к совершенно другому компьютеру, снабжённому интерфейсом Centronics.

Георгий

DP> под винду самый простой (для меня) способ -- использовать DP> OpenGL+GLU+GLUT качнув из инета redbook.pdf (manual на DP> OpenGL), DP> с созданием окошка и обработкой ввода запросто справляется DP> GLUT

JA> Скажи, пожалуйста, как ты выводишь 2D картинку? Через текстуру или JA> как-то более интересно?

элементами с нулевой Z-координатой

JA> Hа первый взгляд MFC, относительно Qt, и рядом не валялся.

MFC с ООП рядом не валялся

посмотри еще SDL -- оно вроде win/lin портабельно, но мне не хватило желания найти DirectX SDK

Привет!

Fri Aug 25 2006 22:34, George Shepelev wrote to Jurgis Armanavichius:

JA>> ? "PC-совместимая плата" (ранее я уточнял, что именно материнская JA>> плата, а не Multi I/O какой-нибудь) - бессмысленный набор слов?... JA>> Странно... А как тогда правильно назвать основную компьютерную JA>> плату ("маму"), которая является PC-совместимой? GS> Так и называй - "PC-совместимая МАТЕРИHСКАЯ плата".

Понял, в чем кроется непонимание. Однако должен заметить, что ранее было неоднократно уточнено, что речь идет именно о материнской плате. Я просто посчитал неуважительным к собеседнику подход, когда я на каждом шагу стал бы уточнять: "Я говорю именно о материнской плате!", будто собеседник - какой-то неспособный запомнить, о чем он только что услышал. Поэтому и не стал разжевывать... Видать, напрасно...

:-)

JA>> Честно говоря, я был абсолютно уверен, что такая плата называется JA>> PC-совместимой... GS> Плата с однокристаллкой, втыкаемая в разъём LPT, тоже может являться GS> PC-совместимой. И при этом вполне может функционировать, будучи GS> подключенной к совершенно другому компьютеру, снабжённому интерфейсом GS> Centronics.

Да, я понял. Там из контекста (точнее, из предыдущих писем) однозначно было ясно, о чем речь идет. Hе о Multi I/O... ;-)

Юргис

Ну статические ты сюда сам приплел - но в автоматических есть и внутренние new и delete, а не только вызов конструкторов и деструкторов. То что они там заинлайнены роли не играет.

x.cc:

#include <stdio.h>

class xxx { public: xxx() { printf("xxx\n"); } ~xxx() { printf("~xxx\n"); } }; void aaa() { xxx x1[10]; }

Вызови gcc -S x.cc и посмотри x.s - если конечно сумееш. Ну а не сумеешь - твои проблемы.

Выбери что нить одно - или они там есть или их там нет. Про то что их надо ПИСАТЬ - я не говорил. Конструкторы и деструкторы относятся к классу а new и delete это управление памятью.

Ты похоже тоже разницы между динамическими и автоматическими переменными не знаешь. Твой (для динамической памяти) вызывать не стал - а свой (для автоматической) вызвал - посмотри ассемблерный текст. Только закажи массив - с простой переменной new и delete компайлер все заоптимизирует до неузнаваемости - sub $xx,%esp ; leal xx(%esp),%eax; push %eax; call constructor это и есть оператор new.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required