|
|
  |
Совместное использование *.сpp файлов и *.c, Не компилируются совместно файлы Си и Си++ |
|
|
|
Jun 9 2011, 07:43
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
В хедерах си-шных модулей надо вставить скобки Код #ifdef __cplusplus BEGIN_EXTERN_C #endif ... #ifdef __cplusplus END_EXTERN_C #endif , где Код #define BEGIN_EXTERN_C extern "C" { #define END_EXTERN_C } Компилировать и линковать в режиме "плюсов"
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jun 9 2011, 08:05
|

Местный
  
Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634

|
Цитата(MrYuran @ Jun 9 2011, 12:43)  В хедерах си-шных модулей надо вставить скобки Код #ifdef __cplusplus BEGIN_EXTERN_C #endif ... #ifdef __cplusplus END_EXTERN_C #endif , где Код #define BEGIN_EXTERN_C extern "C" { #define END_EXTERN_C } Компилировать и линковать в режиме "плюсов" Компилится. Только не в хэдерах си-шных модулей, а в хэдере си++ модуля. У меня только так заработало.
|
|
|
|
|
Jun 16 2011, 18:24
|
Знающий
   
Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748

|
Цитата(mdmitry @ Jun 9 2011, 13:47)  Можно ставить с любых заголовочных файлах, которые включаются в проект для с и cpp. в принципе если извратица то можно из сишной программы вызывать с++ модули. у вас проблема в том, что С++ делает такую хрень как name mangling. то есть при линковке имена ваших функций становятся такими что их сишный линкер не может понять. решение которое вам подсказали вверху заставляет линкер не искажать имя функции. но если вы попробуете предложить несколько функций с одинаковым названием-перегруженные, то опять получите ошибку.
|
|
|
|
|
Jun 17 2011, 13:57
|

Twilight Zone
  
Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990

|
Цитата(sergeeff @ Jun 17 2011, 16:20)  Хоть один пример. для С++ NULL не типизирован явно, как в Си, так что приходиться делать так: /* Define NULL pointer value */ #ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif #endif
--------------------
Magic Friend
|
|
|
|
|
Jun 17 2011, 13:59
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (Сергей Борщ @ Jun 17 2011, 16:40)  Область видимости констант, неявное приведение void * к любому указателю в С. Это так, навскидку. Декларация и инициализация стуктур и константных объектов, тип литералов типа 'abcd', объявления типов в sizеof, , функции с переменным количеством аргументов, еще некоторые до сих пор не польззуются прототипами функций  и C а не C99,..... В общем лучше попробовать компильнуть  Вообще-то в С++ стандарте, помнится, было целое приложение посвященное проблемам несовместимости. P.S. Да. Посмотрел - Annex C Compability. Единственно, что там явно не C99. Да и многие 'С' компиляторы будут на некоторые конструкции хоть не ошибки, но warnings выдавать.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 19 2011, 17:36
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(sergeeff @ Jun 18 2011, 17:51)  Вы хоть эту ветку читаете? Про extern "C"? А вы хоть читаете, о чём я спрашиваю? Одно дело, когда обычный си модуль не может найти си++ функцию, имя которой, по понятным причинам, видоизменено. Но когда наоборот - си++ модуль в упор не видит обычную си функцию? В этом случае ведь name mangling не работает? Ошибка уходит, когда принудительно включаю компиляцию си файлов в режиме си++.
|
|
|
|
|
Jun 20 2011, 02:59
|

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

|
Цитата(sonycman @ Jun 20 2011, 04:17)  Я об этом знал, но считал, что это работает только в сторону от си++ к си. Не думал, что плюсы будут манглить даже обычную сишную функцию, подключенную через хидер  Если компиляете в С++ режиме, то все функции будут кодироваться по-плюсатому. Ведь в плюсах обычное дело та же перегрузка имён функций, и как компилятор должен догадаться, какие функции у вас имеют С-связывание, а какие С++ связывание. Для этого и введена спецификация связывания extern "<Lang>", где <Lang> - отличный от С++ язык (там не обязательно должен быть С, хотя этот вариант встречается в подавляющем большинстве случаев).
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Jun 20 2011, 09:13
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(dxp @ Jun 20 2011, 06:59)  Если компиляете в С++ режиме, то все функции будут кодироваться по-плюсатому. Ведь в плюсах обычное дело та же перегрузка имён функций, и как компилятор должен догадаться, какие функции у вас имеют С-связывание, а какие С++ связывание. Для этого и введена спецификация связывания extern "<Lang>", где <Lang> - отличный от С++ язык (там не обязательно должен быть С, хотя этот вариант встречается в подавляющем большинстве случаев). Спасибо. Интересно, а какие ещё есть идентификаторы <Lang>? Цитата(XVR @ Jun 20 2011, 12:42)  А откуда С++ знать, что это 'обычная С функция'? Для этого extern "C" и предназначен  Так тело-то этой функции - в обычном .c файле! Компилер что, манглит сразу имя функции по её объявлению в хидере, не заглядывая даже в определение? Вот шустрый какой!
|
|
|
|
|
Jun 20 2011, 09:21
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(sonycman @ Jun 20 2011, 13:13)  Так тело-то этой функции - в обычном .c файле! А как компилятор в процессе компиляции файла А узнает о теле функции в файле Б? Он же их отдельно компилирует Цитата Компилер что, манглит сразу имя функции по её объявлению в хидере, не заглядывая даже в определение? Разумеется. Тело функции его не интересует (его вообще может не быть)
|
|
|
|
|
Jun 22 2011, 13:59
|
Знающий
   
Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748

|
Цитата(dxp @ Jun 22 2011, 16:13)   Вам сюда. Для меня достаточно просто посмотреть на код С++ в асме- что он там плодит, чтобы больше так никогда не делать. Все это красиво получается в исходниках, но не в работе.
|
|
|
|
|
Jun 22 2011, 17:52
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (dxp @ Jun 22 2011, 17:48)  Заинтриговали. И что же он там такое плодит? А, полагаю, все как обычно, например, то, что видит человек сумевший написать 100 команд (условно) на ASM, при виде листинга С/C++ программы хотя-бы на десяток килобайт. А видит он количество команд выходящее за рамки его разумения, вот и все  . Занавес. Однажды я наблюдал шоковое состояние когда считающемуся достаточно опытным ASM писателю предъявил вместо его программы на ASM, которая, 1) была размером под 8K; 2) генерировала иногда в ответ не такой, сигнал, какой хотел заказчик; 3) не тянула генерацию оного сигнала выше 12KHz (заказчик уже соглашался ставить другой контроллер ). Сишную, писанную за воскресенье, на пару килобайт меньше, правильно работающую, и к тому-же успевающую где-то под 40KHz работать. Он думал, а может и сейчас так думает, что его просто дурят прокручивая ему на экране LeCroy какую-то обманку  . Поскольку доподлинно знал, что С есть гуано  , поскольку тоже что-то вроде "просто посмотреть на код С++ в асме что он там плодит,"
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 23 2011, 11:21
|
Знающий
   
Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748

|
Цитата(XVR @ Jun 22 2011, 23:19)  Угу, видели видели. Начинается с воплей 'какое С/С++ гуано', а заканчивается открытием, что у С/С++ компиляторов оказывается есть разные уровни оптимизации и дебаггерные режимы  код написанный на С++ исполняется дольше кода написанного на С или на asm хоть ты усрись с оптимизацией
|
|
|
|
|
Jun 23 2011, 11:30
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(inventor @ Jun 23 2011, 15:21)  код написанный на С++ исполняется дольше кода написанного на С или на asm хоть ты усрись с оптимизацией Да и на здоровье. Ну вот какая, к примеру, разница, находится процессор в IDLE 99% или 98,9% времени? То же самое в большинстве случаев можно сказать и про объём.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jun 23 2011, 16:41
|
Знающий
   
Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748

|
Цитата(dxp @ Jun 23 2011, 16:35)  Это такой закон природы или что? Пример покажите? Нет. Это объективная реальность  Сейчас нет под рукой примера, завтра что-нибудь нарою.
|
|
|
|
|
Jun 23 2011, 17:54
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(inventor @ Jun 23 2011, 15:21)  код написанный на С++ исполняется дольше кода написанного на С или на asm Угу, угу. Вспоминается (с баша вроде) - Цитата - Вот, моя программа в 10 раз меньше, в 3 раза быстрее и памяти жрет в 5 раз меньше, чем твоя! - Зато моя работает, а твоя нет. Желаю успехов в написании программ на ассемблере, ну к примеру, для Itanium'а Цитата хоть ты усрись с оптимизацией Это с опытом обычно проходит
|
|
|
|
|
Jun 24 2011, 13:15
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (sergeeff @ Jun 24 2011, 13:45)  Уж сколько понаписано глупостей QUOTE про преждевременную оптимизацию, а .... Не все правда глупости, но 95% процентов воспринимают подобные речи о "преждевременности" таким образом, что в результате делают глупости  . А причем тут преждевременная оптимизация вообще-то???
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 24 2011, 15:50
|
Знающий
   
Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748

|
Цитата(zltigo @ Jun 24 2011, 17:15)  глупостей Не все правда глупости, но 95% процентов воспринимают подобные речи о "преждевременности" таким образом, что в результате делают глупости  . А причем тут преждевременная оптимизация вообще-то??? Не было времени сегодня искать пример, щас попробую его описать. Процессор работает на чатоте 14 Мгц обменивается с другим процом на частоте 1Мгц. На асме около 70 строк кода обработчика прерывания. На С примерно в два раза больше. Программа на С работает на пределе. Но не сбоит. Даже не представляю как это будет работать на С++. Да...вся программа умещается во внутренней памяти DSP.
|
|
|
|
|
Jun 25 2011, 09:41
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(zltigo @ Jun 24 2011, 16:15)  глупостей Не все правда глупости, но 95% процентов воспринимают подобные речи о "преждевременности" таким образом, что в результате делают глупости  . А причем тут преждевременная оптимизация вообще-то??? А что, вопли про громоздкий код С++ по сравнению с С не есть пример "преждевременной оптимизации"? Нет пока не одного реального примера сравнения быстродействия задачи при реализации там и там, а вопли есть. По моему - типичный пример
|
|
|
|
|
Jun 25 2011, 17:38
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(zltigo @ Jun 25 2011, 12:47)  После этого я совсем перестал понимать смысл  вкладываемый Вами в словосочетания "преждевременная оптимизация". Ну да ладно, переживу. По-моему, вполне понятно о чем идет речь. Заявляется (голословно), что С++ язык медленный, а С и, уж конечно, ASM, намного быстрее. Посему, задача изначально проектируется не на С++. Ровно про это писал Александреску со-товарищи, а именно, сначала сделайте работоспособное решение, а потом, изучайте узкие места и их оптимизируете. Вроде я "мастерам" не противоречу, говоря о "преждевременной оптимизации"-
|
|
|
|
|
Jun 25 2011, 18:53
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (sergeeff @ Jun 25 2011, 19:38)  Ровно про это писал Александреску со-товарищи, а именно, сначала сделайте работоспособное решение, а потом, изучайте узкие места и их оптимизируете. Вы опять с этим Александреску с его обобщенно-шаблонно-абстрактным программированием  . Нам такие товарищи эмбеддерам совсем НЕ товарищи. Думать о построении системы и узких местах нужно СРАЗУ, а не потом рассматривая что такое выросло и как "оптимизировать" сие ЗАПЛАТКАМИ. Все узкие места должны быть ИЗВЕСТНЫ на этапе проектирования, и сделаны ОЦЕНКИ критичности этих мест до того, как будет написана левой ногой кучи кода.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 25 2011, 22:44
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(zltigo @ Jun 25 2011, 21:53)  Вы опять с этим Александреску с его обобщенно-шаблонно-абстрактным программированием  . Нам такие товарищи эмбеддерам совсем НЕ товарищи. Думать о построении системы и узких местах нужно СРАЗУ, а не потом рассматривая что такое выросло и как "оптимизировать" сие ЗАПЛАТКАМИ. Все узкие места должны быть ИЗВЕСТНЫ на этапе проектирования, и сделаны ОЦЕНКИ критичности этих мест до того, как будет написана левой ногой кучи кода. Ну ладно. Александреску нам не авторитет. Мне тоже не все его мысли и рецепты нравятся, хотя встречаются и очень изящные решения. Посмотрим с другой стороны. Имеем в начале работы процессор, компилятор и стандартную библиотеку. Начинаем работать? Начинаем. Прикидываем все, где чего и как по-лучше написать. Сделали. И вдруг (или не вдруг) натыкаемся на то, что стандартная memcpy полная г...о (на форуме мы это неоднократно обсуждали), а мы ее пользуем в хвост и в гриву. Затем выясняется, что и memset такая же. А потом понимаем, что вся куча написана через жо...у. Мы про это тоже СРАЗУ должны были знать на начальном этапе проектирования? Откуда? Нам фирма-изготовитель компилятора "любезно" рассказала? Вы всегда можете предсказать какой именно алгоритм сортировки окажется самым быстрым на вашем конкретном типе данных? Ой ли. С другой стороны, может и с этими хреновыми (не оптимальными) функциями все вполне бы катило и заказчика устраивало? Мы тогда жили бы себе в спокойном чувстве полного самоудовлетворения и над всей этой ерундой и не задумывались. Резюме (мое личное, может и неправильное) - невозможно все заранее предусмотреть (кое что можно), хотя бы из-за ограниченности собственных временнЫх возможностей и сил. Проект всегда итерационен (почти).
|
|
|
|
|
Jun 26 2011, 05:03
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(sergeeff @ Jun 26 2011, 01:44)  Проект всегда итерационен (почти). Не могу согласиться. Практически во всех проектах можно безболезненно заложить ресурсов в два раза больше, чем требуется при первоначальной оценке. При некотором отличном от нуля опыте этого вполне хватает, чтобы изменения ТЗ и особенности функционирования семейства контроллеров и/или библиотек уложились в резерв.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Jun 26 2011, 06:35
|
Знающий
   
Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748

|
Цитата(sergeeff) Сделали. И вдруг (или не вдруг) натыкаемся на то, что стандартная memcpy полная г...о (на форуме мы это неоднократно обсуждали), а мы ее пользуем в хвост и в гриву. Затем выясняется, что и memset такая же. А потом понимаем, что вся куча написана через жо...у. Мы про это тоже СРАЗУ должны были знать на начальном этапе проектирования? Откуда? Нам фирма-изготовитель компилятора "любезно" рассказала? Именно так и есть, обычно все библиотеки САМ перекопилируешь-выкидывая оттуда все ненужное и исправляя ихние ошибки. Что в этом неправильного?
|
|
|
|
|
Jun 26 2011, 08:26
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (sergeeff @ Jun 26 2011, 00:44)  Имеем в начале работы процессор, компилятор и стандартную библиотеку. Забыли главное - голову на плечах и опыт отличный от нуля. Без этих двух вещей получаем воинствуещего ламера inventor  . QUOTE Проект всегда итерационен (почти). Подход а-ля Александреску характерен для научных работ - давайте на бумаге/модели получим, хоть какой-то результат и потом подумаем, что дальше делать. У инженеров в сложных случаях тоже есть понятие НИОКР, но это именно заранее запланированный этап. QUOTE (inventor @ Jun 26 2011, 08:35)  Именно так и есть, обычно все библиотеки САМ перекопилируешь-выкидывая оттуда все ненужное и исправляя ихние ошибки.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 26 2011, 09:37
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(zltigo @ Jun 26 2011, 11:26)  Забыли главное - голову на плечах и опыт отличный от нуля. Это само собой подразумевалось. Однако, при переходе на новый процессор+компилятор всегда есть определенная доля неизведанности, понимание которой приходит не СРАЗУ, а по мере работы над проектом. Потом, мне кажется, спор возник из-за наличия двух принципиально различных типов проектов. Первые, по типу обучения в вузе "зазубрил/сдал/забыл", а вторые - большие проекты, пишущиеся и развивающиеся годами. Коллеги работают в разных типах проектов, отсюда и разное видение проблем.
|
|
|
|
|
Jun 26 2011, 10:18
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (sergeeff @ Jun 26 2011, 12:37)  Однако, при переходе на новый процессор+компилятор всегда есть определенная доля неизведанности, понимание которой приходит не СРАЗУ, а по мере работы над проектом. На новый процессор - для этого существуют отладочные платы - купил, попробовал, в том числе и принципиально узки места по железу/софту, осознал... С компиляторами все еще проще - они достаточно все одинаково хороши и обычно кроссплатформенны, посему, как правило, компилятор уже достаточно знаком. Исключения встречаются, но они скорее всего уже именно исключения, если необходимо вдруг наконец-то заставить работать что-то старое неведомо кем сделанное. И тогда имеем какой-нибудь достаточно ущербный контроллер и такой-же замерший в прошлом компилятор. Я в прошлом году дважды с таким сталкивался - PIC16 + Hi-Tech C компилятор и M8C + ImageCraft. Это дополнительно создает некоторые хлопоты. Но это был такой прыжок в прошлое. Нехарактерный. QUOTE Потом, мне кажется, спор возник из-за наличия двух принципиально различных типов проектов. Категорически нет. Проблема просто у уровне знаний - ниже плинтуса, или выше.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 26 2011, 10:39
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(zltigo @ Jun 26 2011, 13:18)  Категорически нет. Проблема просто у уровне знаний - ниже плинтуса, или выше. Согласитесь,что проект <4Kb и проект >1Mb несколько отличаются. И технологии при их реализации тоже. А вообще, солнышко светит, лето, воскресенье. Надо пользоваться случаем и отдыхать, чего всем и желаю.
|
|
|
|
|
Jun 27 2011, 06:43
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(zltigo @ Jun 25 2011, 22:53)  Все узкие места должны быть ИЗВЕСТНЫ на этапе проектирования, и сделаны ОЦЕНКИ критичности этих мест до того, как будет написана левой ногой кучи кода. Да, но не надо переживать о нескольких лишних байтах/циклах там, где это совершенно некритично. Некоторые в ужасе хватаются за голову, видя в контроллерном проекте float. Ну а что такого? Если скорость всех расчётов на порядки выше, чем скорость поступления сэмплов с АЦП. Вот это видимо и имелось в виду. Не надо пытаться заоптимизировать всё до смерти без насущной необходимости. Иметь представление об узких местах и проектировать с их учётом - надо. А про оптимизацию, по-моему, Макконнел рассуждал в "совершенном коде". У него было там что-то типа "мысли об оптимизации могут совершенно заблокировать разработку проекта. " Вот нашёл, цитата из книги: Цитата Как правило, не стоит тратить много усилий на оптимизацию отдельных мето- методов. Эффективность в основном определяется конструкцией высокого уровня. Обычно микрооптимизация выполняется, только когда закончена вся программа и выясняется, что высокоуровневая конструкция исчерпала свои возможности обеспечить нужную производительность. Не теряйте время на вылизывание от- отдельных методов, пока не выяснится, что это необходимо.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jun 27 2011, 06:57
|

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

|
Цитата(inventor @ Jun 24 2011, 22:50)  Не было времени сегодня искать пример, щас попробую его описать. Процессор работает на чатоте 14 Мгц обменивается с другим процом на частоте 1Мгц. На асме около 70 строк кода обработчика прерывания. На С примерно в два раза больше. Программа на С работает на пределе. Но не сбоит. Даже не представляю как это будет работать на С++. Да...вся программа умещается во внутренней памяти DSP. И где тут пример? Привели какие-то общие фразы, дескать, тут быстрее, тут медленее, а С++ тут вообще в пролёте. Где аргументы? Где доказательства? Реальный пример давайте. Например, вот написали протокол обмена по UART на С++, оказалось в два раза медленнее, чем на С. Вот и давайте оба варианта (на С и на С++) в студию. Это будет пример, который можно обсуждать. Цитата(zltigo @ Jun 26 2011, 01:53)  Вы опять с этим Александреску с его обобщенно-шаблонно-абстрактным программированием  . Нам такие товарищи эмбеддерам совсем НЕ товарищи. Цитата(zltigo @ Jun 26 2011, 15:26)  Подход а-ля Александреску характерен для научных работ - давайте на бумаге/модели получим, хоть какой-то результат и потом подумаем, что дальше делать. У инженеров в сложных случаях тоже есть понятие НИОКР, но это именно заранее запланированный этап. Насчёт Александреску вынужден не согласиться. У него показаны приёмы, как сделать написание кода более удобным и безопасным. Это, конечно, требует труда вникать (например, списки типов я так до конца и не вкурил - хоть и интересно, но актуальности пока нет и не предвидится, хотя имею в виду). Но у него помимо "тяжёлых" вещей вроде разработки на основе стратегий, немало просто полезных фишек вроде "распознавания конвертируемости и наследования на этапе компиляции". Конечно, подобные приёмы возникли от недостатка соответствующих средств в самом языке, но само решение очень красиво и, главное, в отличие от typeof(), выполняется на этапе компиляции. Или его менеджер памяти, который оптимизирован (скорость и компактность) для работы небольшими (десятки байт) объектами. Для AVR, конечно, не пойдёт, но на каком-нить АРМе уже вполне может оказаться кстати. Вообще, Александреску представляет очень интересный взгляд на хорошо известные штатные языковые средства, и взгляд этот у него очень нестандартен. Даже если не подсаживаться на эти приёмы, поизучать (даже просто прочитать на разок) оказывается очень нелишним. Достойное чтиво и неплохая разминка для мозгов.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Jun 27 2011, 08:20
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (dxp @ Jun 27 2011, 08:57)  Насчёт Александреску вынужден не согласиться...... Я не об этом - он реально занимается решением ДРУГИХ задач и выхватывать из его книг какие-то слова, например, о вреде преждевременной оптимизации и поминать их всуе, как минимум, не корректно. QUOTE (MrYuran @ Jun 27 2011, 08:43)  Вот нашёл, цитата из книги: Золотые слова - подпишусь под каждым. Только вот К ЖУТЧАЙШЕМУ моему сожалению толпы эмбеддерщиков об оптимизации на верхних уровнях думают с трудом  . Зато по рассуждать о том что на десяти командах они на АSM обгонят компилятор это всегда готовы  . А услышав слова о вреде преждевременной оптимизации поснимают галочки где-нибудь в IDE и скажут, что Александреску с Макконнелом так велят  . Умение оптимизировать на верхних уровнях определяется в том числе и инструментальными средствами которые человек освоил. Одно дело, когда человек пошел от сохи железа и постиг программирование в кодах (на самом деле он считает, что пишет, на ASM, но реально это настолько минималистичное использование даже ASM, что это практически кодирование  ). Другое, когда уже понимает и имеет успешный опыт, например, в C++. Это другие горизонты, другое понимание и другие возможности.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 27 2011, 10:44
|

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

|
Цитата(MrYuran @ Jun 27 2011, 14:02)  Согласен, хотя я пока ниасилил. Выглядит как книга магических заклинаний: завораживает, но ничего не понятно! Остаётся пользоваться готовыми рецептами, самому готовить ещё учиться и ещё два раза. Мне тоже не всё понятно было (пока её только на разок прошёл), но кое-что уже в кассу. Например, подсмотрел приём, который он там реализует для стратегий: Код template<typename T> class A : public T { ... }; Т.е. шаблон, позволяющий генерировать реализацию с выбором базы для неё. Простая, в общем-то, штука, но как-то само в голову не пришло. Эту вещь реально поюзал. Или реализация класса Conversion (п.2.7). Довольно простое и изящное решение на основе свойств оператора sizeof(). Пока применить не пришлось, но имею в виду. Очень нравится незамутнённый нестандартный взгляд на привычные, уже набившие оскомину вещи. Что ни говори, а Александреску молодец, и каждый при желании может там найти для себя что-то полезное и интересное.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|