-
- .h и extern чем не угодили ? - zeleny(28.08.2013 17:46)
- Как правило, стандарты кодирования также определяют взаимодействие между модулями. Для относительно простых проектов (до 50.000 строк) у нас используется стандарт uCOS, но мне надоело перекомпилявить всё из-за добавления одной глобальной VVB(133 знак., 28.08.2013 12:11)
- ----------------- - plainuser(28.08.2013 10:07 - 10:16)
- Забавный способ редактировать пост. Если что, сносите в мусорку - не обижусь. - SciFi(28.08.2013 10:18)
- зачем потер? разумные слова были. - Nikolay801_(28.08.2013 10:18)
- Решил погодить , тут ругани на три дня не меньше выйдет.Работы много, некогда. - plainuser(28.08.2013 10:18)
- Но меня давно эта тема интересует. - plainuser(28.08.2013 10:20)
- Конечно, всё сильно зависит от размера проекта. Умиляет, когда аффтар программы на 1000 строк мучается душевными метаниями: "Структура? Или массив? extern? Или передавать указатель?" SciFi(45 знак., 28.08.2013 10:15)
- над проектом работают несколько программистов. у каждого свои задачи со своими модулями. - Constantin24(28.08.2013 10:20)
- Общепринятые правила ведения дискуссии говорят, что пора переходить на личность вопрошающего. Скажите, Вы Vladimir Ljaschko(148 знак., 28.08.2013 13:28)
- 1)я не рулю ни кем.я новичок в этом. раньше работал в асме. Constantin24(57 знак., 28.08.2013 13:35)
- вот чья палка совпадает с мнением форумчам тот пускай и порулит пока - abivan(28.08.2013 13:51)
- То-то я думаю, Вы не протипоставили ни одного аргумента на высказывания участников. Возьмите готвые правила оформления, как уже советовали. Наберете опыт - поменяете. - Vladimir Ljaschko(28.08.2013 13:45)
- можете объяснить чем плох вариант Constantin24(68 знак., 28.08.2013 14:06)
- Там и ответили. Зачем? Проектируется обычно снизу вверх. Программист сортировки говорит программисту АЦП - дай хедер с данными АЦП, и говорит другим - вот мой хедер с результатами сортировки. Кому нужно, тот включает, все независимы. В Вашем Vladimir Ljaschko(102 знак., 28.08.2013 15:22)
- к примеру для некой обработки данных для модуля ONE нужны значения переменных с модулей A, B, C; для модуля TWO нужны значения переменных с модулей С, D, E, F. Тогда нужно будет включить в хедере ONE и TWO соответствующие модули. Через некоторое Constantin24(329 знак., 28.08.2013 16:13)
- Для этого случая есть грязный хак: создается файл includes.h, в котором включаются ВСЕ хедеры и который включается во ВСЕ файлы С. Многие так делают, я не исключение, аж взблевнуть хочется :) Но по крайней мере этот метод лучше, чем Ваш: не Vladimir Ljaschko(1244 знак., 28.08.2013 17:06)
- вот именно такое я и имел виду. Почему от этого взблевнуть хочется? что в этом такого ужасного???? - Constantin24(29.08.2013 07:26)
- 1) Потому что это видимое доказательство "шпагетти", наглядно демонстрирующее отсутствие системного подхода в разработке ПО. 2)Есть действительные неудобства, например увеличенное время компиляции, разница в десятки секунд. Мало того, что треть Vladimir Ljaschko(109 знак., 29.08.2013 17:46)
- ладно, пора штото решать. благодарю за ваши ответы и подробные объяснения! - Constantin24(29.08.2013 21:03)
- 1) Потому что это видимое доказательство "шпагетти", наглядно демонстрирующее отсутствие системного подхода в разработке ПО. 2)Есть действительные неудобства, например увеличенное время компиляции, разница в десятки секунд. Мало того, что треть Vladimir Ljaschko(109 знак., 29.08.2013 17:46)
- Я уже упоминал стандарт кодирования uCOS, похоже, "чукча писатель" - VVB(29.08.2013 05:36)
- вот именно такое я и имел виду. Почему от этого взблевнуть хочется? что в этом такого ужасного???? - Constantin24(29.08.2013 07:26)
- ложной посылкой является " и нет больше необходимости следить за подключенными модулями...", за ними нужно следить, если Вы собираетесь использовать некий функционал стороннего модуля, то это нужно делать осознанно, а не внезапно. Nikolay801_(220 знак., 28.08.2013 17:05)
- хорошая идея) - Constantin24(29.08.2013 07:29)
- Возвращайте из каждого модуля указатель на структуру параметров. Добавление полей(параметров) в структуру, влечет корректировку описания структуры в хедере и все. - Dany(28.08.2013 16:47)
- хороший метод. попробую на практике - Constantin24(29.08.2013 07:32)
- Может я невнимательно вник в проблему, но хедеры модулей инклюдятся непосредственно в Си-шный исходник, который работает с этими модулями. Если что-то меняется в работе или хедере конкретного модуля, то естественно правятся все зависимые от него rezident(155 знак., 28.08.2013 16:21)
- Не обманывайте себя: если у вас все модули используют все переменные, то никакие это не модули, а практически спагетти-код. SciFi(81 знак., 28.08.2013 16:20)
- видимо я не правильно понял принцип модульности. пойду почитаю еще литературы - Constantin24(29.08.2013 07:33)
- Хороший спагетти код ведёт к пожизненной занятости, уважаемому и хорошо оплачиваемому труду. - fk0(28.08.2013 16:47)
- Для этого случая есть грязный хак: создается файл includes.h, в котором включаются ВСЕ хедеры и который включается во ВСЕ файлы С. Многие так делают, я не исключение, аж взблевнуть хочется :) Но по крайней мере этот метод лучше, чем Ваш: не Vladimir Ljaschko(1244 знак., 28.08.2013 17:06)
- к примеру для некой обработки данных для модуля ONE нужны значения переменных с модулей A, B, C; для модуля TWO нужны значения переменных с модулей С, D, E, F. Тогда нужно будет включить в хедере ONE и TWO соответствующие модули. Через некоторое Constantin24(329 знак., 28.08.2013 16:13)
- он не плох, он просто лишний. С этой задачей вполне справится хедер модуля. - abivan(28.08.2013 14:14)
- Там и ответили. Зачем? Проектируется обычно снизу вверх. Программист сортировки говорит программисту АЦП - дай хедер с данными АЦП, и говорит другим - вот мой хедер с результатами сортировки. Кому нужно, тот включает, все независимы. В Вашем Vladimir Ljaschko(102 знак., 28.08.2013 15:22)
- а аргументов против и не должно было быть, человек спрашивает "как?", а не "почему нет?" - Nikolay801_(28.08.2013 14:03)
- интересно конечно оба вопроса. как использует? и почему так?(может были инциденты например если по другому) - Constantin24(28.08.2013 14:05)
- можете объяснить чем плох вариант Constantin24(68 знак., 28.08.2013 14:06)
- 1)я не рулю ни кем.я новичок в этом. раньше работал в асме. Constantin24(57 знак., 28.08.2013 13:35)
- --> - SciFi(28.08.2013 10:22, ссылка)
- Общепринятые правила ведения дискуссии говорят, что пора переходить на личность вопрошающего. Скажите, Вы Vladimir Ljaschko(148 знак., 28.08.2013 13:28)
- над проектом работают несколько программистов. у каждого свои задачи со своими модулями. - Constantin24(28.08.2013 10:20)
- правильно передать указатель через сервис "сообщение" ОСРВ :) abivan(191 знак., 28.08.2013 09:48)
- хм, проснулись шутники? - Nikolay801_(28.08.2013 10:10)
- если переменных 10, то можно загнать их в массив и через функцию возвращать указатель, или описать их как структуру и возвращать указатель на структуру. Nikolay801_(130 знак., 28.08.2013 08:19)
- модулей и переменных может быть разное количество. описывать каждого загромождает код. нет ли другого пути. extern перед переменной не используя - Constantin24(28.08.2013 08:23)
- либо extern переменная, либо функция (в т.ч. inline), либо доступ по адресу, либо weak callback (но это скорее изврат) - Vit(28.08.2013 09:13)
- более правильный вариант Nikolay801_(353 знак., 28.08.2013 08:49)
- в таком случае как раз о чем я писал. придется для каждой переменной свою функцию. может есть как поудобней - Constantin24(28.08.2013 09:02)
- есть =AlexD=(541 знак., 28.08.2013 09:20 - 09:26)
- плюсы это пожалуй перебор... - Nikolay801_(28.08.2013 09:24)
- В данном случае все функции будут инлайновыми и выродятся в простое получение значения переменной, в отличии от. Так кто там что-то говорил про неэффективность плюсов? - =AlexD=(28.08.2013 09:28)
- Такое можно и без плюсов сделать. На макросах и/или inline функциях. А в плюсах можно сделать обратное -- переопределить operator=... Тут ж пример эмуляции пропертей и дельфи давали недавно. - fk0(28.08.2013 11:52)
- Да сэр, можно, но зачем? - =AlexD=(28.08.2013 13:01)
- мое возражение снимается. - Nikolay801_(28.08.2013 09:35)
- Такое можно и без плюсов сделать. На макросах и/или inline функциях. А в плюсах можно сделать обратное -- переопределить operator=... Тут ж пример эмуляции пропертей и дельфи давали недавно. - fk0(28.08.2013 11:52)
- В данном случае все функции будут инлайновыми и выродятся в простое получение значения переменной, в отличии от. Так кто там что-то говорил про неэффективность плюсов? - =AlexD=(28.08.2013 09:28)
- плюсы это пожалуй перебор... - Nikolay801_(28.08.2013 09:24)
- вариант с экстерном прост как пробка и годен для мелких поделок, вариант с хидером расчитан на дальшейшее расширение, можно наращивать функциональность добавляя/изменяя функции. Nikolay801_(148 знак., 28.08.2013 09:16)
- я тебе предложил 2 варианта, зачем третий? Nikolay801_(74 знак., 28.08.2013 09:12)
- есть =AlexD=(541 знак., 28.08.2013 09:20 - 09:26)
- в таком случае как раз о чем я писал. придется для каждой переменной свою функцию. может есть как поудобней - Constantin24(28.08.2013 09:02)
- не кошерный вариант Nikolay801_(129 знак., 28.08.2013 08:32)
- спаисбо, но так не пойдет - Constantin24(28.08.2013 08:37)
- Религия не позволяет? или боишься гнева "правоверных"? :) абалдуй(302 знак., 28.08.2013 08:46,
)
- кстати, идти против навязанных шаблонов - один из древнейших навязанных шаблонов. Nikolay801_(39 знак., 28.08.2013 10:07)
- предлагаешь плюнуть на всех и писать как себе удобно?=) на счет производительности: есть код, выполняется 40 мкс, хотя если правильно написать не пользуясь модульностью можно и в 5 мкс уложиться. мне сказали чтобы не обращал внимания,кристалл Constantin24(78 знак., 28.08.2013 09:01)
- Мой "не шаблонный" пример: кучу переменных собрал в одну глобальную структуру, в разных модулях устанавливаю эти переменные и соответствующие флажки действительности значений, в другом модуле обрабатываю результат и сбрасываю флажки в критической абалдуй(498 знак., 28.08.2013 09:20,
)
- не расстраивайся - правильный оптимизатор такие функции умеет сам инлайнить - Vit(28.08.2013 09:16)
- Мой "не шаблонный" пример: кучу переменных собрал в одну глобальную структуру, в разных модулях устанавливаю эти переменные и соответствующие флажки действительности значений, в другом модуле обрабатываю результат и сбрасываю флажки в критической абалдуй(498 знак., 28.08.2013 09:20,
- навязанные шаблоны - это очень хорошо и полезно! Nikolay801_(175 знак., 28.08.2013 08:58)
- Религия не позволяет? или боишься гнева "правоверных"? :) абалдуй(302 знак., 28.08.2013 08:46,
- спаисбо, но так не пойдет - Constantin24(28.08.2013 08:37)
- модулей и переменных может быть разное количество. описывать каждого загромождает код. нет ли другого пути. extern перед переменной не используя - Constantin24(28.08.2013 08:23)
- простите, забыл указать. Пишу на Си для мк stm32f103rbt - Constantin24(28.08.2013 08:03)
- пример: АЦП с помощью DMA пишет измеренные значения в массив Dimension_table[]. другой модуль обрабатывает данные из этого массива(сортирует). Вот как правильнее организовать доступ(учитывая что других переменных,к которым тоже нужен будет Constantin24(40 знак., 28.08.2013 08:28)
- Функция сортировки должна принимать указатель на массив. Какие ещё могут быть варианты? - SciFi(28.08.2013 10:08)
- сортируется в другой массив - Constantin24(28.08.2013 10:18)
- Выдаём информацию по капле? Мне так не интересно. Развлекайтесь без меня :-) - SciFi(28.08.2013 10:21)
- мне не интересно решение самой поставленной мне задачи. мне интересно какие методы( для получения переменной из другого модуля) используют опытные программисты в больших проектах - Constantin24(28.08.2013 10:29)
- Не читал всю ветку, но метод очень простой: SciFi(1154 знак., 28.08.2013 11:09 - 11:18)
- Попробую уточнить. Nikolay801_(445 знак., 28.08.2013 17:29 - 17:43)
- поправка: во втором рисунки остается связь только с common data. остальные связи распадаются - Constantin24(29.08.2013 07:40)
- а чей та? наличие общего корыта отменяет необходимость модбасу лезть в архив? вовсе нет, он будет так же лезть. Nikolay801_(97 знак., 29.08.2013 08:27)
- будет лезть через common data - Constantin24(29.08.2013 10:17)
- эт как это? из Москвы в Рязань через Саратов. - Nikolay801_(29.08.2013 13:53)
- программе какая разница. зато каждый модуль знает что и где - Constantin24(29.08.2013 15:07)
- вернее это будет так, коллега в буденовке будет неописуемо рад. Nikolay801_(140 знак., 29.08.2013 15:42 - 15:45)
- --> - fk0(29.08.2013 17:32, картинка)
- Фигня, вот правильная картинка! - Vladimir Ljaschko(29.08.2013 17:42, картинка)
- --> - fk0(29.08.2013 17:32, картинка)
- так не программа, ты будешь концы искать, программе модульность на не нужна, линкер потом все данные в кучу в любом случае свалит. - Nikolay801_(29.08.2013 15:10)
- вернее это будет так, коллега в буденовке будет неописуемо рад. Nikolay801_(140 знак., 29.08.2013 15:42 - 15:45)
- программе какая разница. зато каждый модуль знает что и где - Constantin24(29.08.2013 15:07)
- эт как это? из Москвы в Рязань через Саратов. - Nikolay801_(29.08.2013 13:53)
- будет лезть через common data - Constantin24(29.08.2013 10:17)
- а чей та? наличие общего корыта отменяет необходимость модбасу лезть в архив? вовсе нет, он будет так же лезть. Nikolay801_(97 знак., 29.08.2013 08:27)
- "которая растет с реактивной скорость при увеличении количества модулей". И это отлично! Пожизненная занятость практически гарантирована. - fk0(28.08.2013 18:45)
- Вашими бы устами, да мед пить! Nikolay801_(95 знак., 28.08.2013 18:52)
- Напомнило. Сравнение внутренних связей (архитектуры) web-сервера Apache и IIS из Microsoft Windows. fk0(524 знак., 28.08.2013 18:40 - 18:44)
- Не знаю как остальные участники конференции, но я не имею ни малейшего понятия о том кто такие Apache и IIS и о их судьбе в коммерческом плане. Nikolay801_(68 знак., 29.08.2013 08:12)
- И это печально! - fk0(29.08.2013 14:36)
- какая ж мне с того печаль? Nikolay801_(29 знак., 29.08.2013 14:57)
- И это печально! - fk0(29.08.2013 14:36)
- вот третий вариант очень хорош) упорядоченный беспорядок) - Constantin24(29.08.2013 07:31)
- nginx? - Evgeny_CD(28.08.2013 18:53)
- Первая схема без проверок результатов функций ;) - Гyдвин(28.08.2013 18:44)
- +1 - Dany(29.08.2013 09:38)
- Не знаю как остальные участники конференции, но я не имею ни малейшего понятия о том кто такие Apache и IIS и о их судьбе в коммерческом плане. Nikolay801_(68 знак., 29.08.2013 08:12)
- поправка: во втором рисунки остается связь только с common data. остальные связи распадаются - Constantin24(29.08.2013 07:40)
- спасибо, ваша методика мне понравилась. Constantin24(182 знак., 28.08.2013 11:22)
- Вариант дурной. Потому, что для начала непонятно, а где фактически, в каких модулях будут переменные определяться. Не будет же variable.c с переменными? А если будет, то всё равно дурной: в некоторых вариантах сборки, при исключении каког-либо fk0(145 знак., 28.08.2013 14:13)
- отказать. каждый модуль должен иметь свой хедер. И если используете глобальные переменные то их описываете тоько в нем(хедере модуля) - abivan(28.08.2013 11:39)
- у каждого модуля и так будет свой хедер. + к ниму будет добавлен хедер с переменными доступные другим модулям - Constantin24(28.08.2013 11:58)
- а теперь представь что модули пишут разные люди(как у тебя в проекте) кто будет править общий файл, все? Разработчику конкретного модуля нахер не уперлось делать двойную работу.(новое: исправил орф ошибку) - abivan(28.08.2013 12:31 - 13:50)
- с помощью репезитора... править и так приходится некий файл. в variable.h подключится хедер модуля с внешними переменными. и можешь в своем хедере редактировать переменные. - Constantin24(28.08.2013 14:02)
- если бы меня как разраба модуля заставили бы поддерживать файл variable.h, то мой вклад бы состоял в следующем abivan(163 знак., 28.08.2013 12:40)
- а теперь представь что модули пишут разные люди(как у тебя в проекте) кто будет править общий файл, все? Разработчику конкретного модуля нахер не уперлось делать двойную работу.(новое: исправил орф ошибку) - abivan(28.08.2013 12:31 - 13:50)
- у каждого модуля и так будет свой хедер. + к ниму будет добавлен хедер с переменными доступные другим модулям - Constantin24(28.08.2013 11:58)
- Мой вариант единственно верный, поэтому ваш мне не нравится :-) SciFi(145 знак., 28.08.2013 11:24)
- ))))ладно.в своем варианте я вижу явное удобство использования переменными Constantin24(71 знак., 28.08.2013 11:58)
- объясните почему бяка - Constantin24(28.08.2013 12:24)
- выкинь бяку, лучше послушай умного дядьку Nikolay801_(28 знак., 28.08.2013 12:06)
- Считаю, многие read-only переменные лучше оставить переменными, особенно в embedded. Ибо действительно муторно, да и дико страдает эффективность. Другое дело что... я против read-write в таком же виде, кроме редких исключений, и против вообще идеи fk0(195 знак., 28.08.2013 11:45)
- Про эффективность: пора уже пожинать плоды такой штуки, как multifile compilation, link-time optimization и т.д. - SciFi(28.08.2013 11:47)
- Где оно есть, покажи пальцем. - fk0(28.08.2013 12:00)
- гэцэцэ, йар, реалвью. - SciFi(28.08.2013 12:10)
- разбаловались, бл.. Что будете делать если жизнь заставит? Чтобы потом не напрягаться лучше сейчас не расслабляться. fk0 +=1; - abivan(28.08.2013 12:34)
- "Преждевременная оптимизация - корень всех зол" © - SciFi(28.08.2013 12:38)
- В контроллерах проф. уровня такого нет. Любительщина... - fk0(28.08.2013 12:15)
- разбаловались, бл.. Что будете делать если жизнь заставит? Чтобы потом не напрягаться лучше сейчас не расслабляться. fk0 +=1; - abivan(28.08.2013 12:34)
- гэцэцэ, йар, реалвью. - SciFi(28.08.2013 12:10)
- Где оно есть, покажи пальцем. - fk0(28.08.2013 12:00)
- Про эффективность: пора уже пожинать плоды такой штуки, как multifile compilation, link-time optimization и т.д. - SciFi(28.08.2013 11:47)
- ))))ладно.в своем варианте я вижу явное удобство использования переменными Constantin24(71 знак., 28.08.2013 11:58)
- Попробую уточнить. Nikolay801_(445 знак., 28.08.2013 17:29 - 17:43)
- Не читал всю ветку, но метод очень простой: SciFi(1154 знак., 28.08.2013 11:09 - 11:18)
- мне не интересно решение самой поставленной мне задачи. мне интересно какие методы( для получения переменной из другого модуля) используют опытные программисты в больших проектах - Constantin24(28.08.2013 10:29)
- Выдаём информацию по капле? Мне так не интересно. Развлекайтесь без меня :-) - SciFi(28.08.2013 10:21)
- сортируется в другой массив - Constantin24(28.08.2013 10:18)
- В применении extern нет никакого криминала, особенно если группировать переменные в структуры и обеспечить иерархию модулей. Как всё-таки ЛИ всех затроллил :) - Vladimir Ljaschko(28.08.2013 09:01)
- Функция сортировки должна принимать указатель на массив. Какие ещё могут быть варианты? - SciFi(28.08.2013 10:08)
- пример: АЦП с помощью DMA пишет измеренные значения в массив Dimension_table[]. другой модуль обрабатывает данные из этого массива(сортирует). Вот как правильнее организовать доступ(учитывая что других переменных,к которым тоже нужен будет Constantin24(40 знак., 28.08.2013 08:28)