|
Объявления, Как принято делать, и кто как реально делает. |
|
|
|
Oct 14 2009, 18:34
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Раньше у меня не было таких проблем. Обычно создавал группу файлов. Как правило все файлы были достаточно обособленными и я их объединял на этапе линковки. Если были групповые общие объявления, то я их делал в main, а в других объявлял как extern.
Проблема возникла в одном проекте. Он получил развитие и теперь существует в нескольких реинкарнациях с различными модификациями и процами. Тем не менее там есть очень крупные общие блоки. Столкнувшись, с проблемой поддержки - пришёл к необходимости общую часть исходников выделить в отдельные файлы/процедуры. А иначе, при внесении изменений приходилось править все проекты. Выделил и переписал, с учётом унификации.
А теперь вопрос. Эти блоки используют общие глобальные переменные. Как их правильно объявить, чтобы было удобнее использовать и поддерживать, а также было меньше разной писанины?
|
|
|
|
|
 |
Ответов
|
Oct 14 2009, 19:38
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(rezident @ Oct 14 2009, 22:13)  Может стоит объединить переменные в глобальную структуру? Проект достаточно крупный. Переменных много. В том числе и структуры тоже есть. Цитата(sigmaN @ Oct 14 2009, 22:25)  А ещё где-то он писал, что за более чем 20летнюю практику программирования он может сказать, что реально обычно требуется пять-десять действительно глобальных переменных на большой проект. В общем так обычно у меня и было. Поэтому вопрос и не возникал. А тут специфика. Представте что модуль выполняет обработку. А-В-С. Причём часть тела модуля B является специфической для разных проектов. Если не резать, то всё нормально, но тогда придётся поддерживать 4 разных проекта. Но часть B является незначительной по сравнению с объёмом самого проекта. Остальные части удалось формализовать. Частично пришлось переписать с прицелом на "универсальность". В результате со всеми проектами можно работать по единым правилам. А то раньше - где-то подправишь - в другом вылазит. За книгу спасибо, попробую почитать.
|
|
|
|
|
Oct 14 2009, 21:32
|
Местный
  
Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205

|
Цитата(SasaVitebsk @ Oct 14 2009, 22:38)  В общем так обычно у меня и было. Поэтому вопрос и не возникал. А тут специфика. Представте что модуль выполняет обработку. А-В-С. Причём часть тела модуля B является специфической для разных проектов. Если не резать, то всё нормально, но тогда придётся поддерживать 4 разных проекта. Но часть B является незначительной по сравнению с объёмом самого проекта. Остальные части удалось формализовать. Частично пришлось переписать с прицелом на "универсальность". В результате со всеми проектами можно работать по единым правилам. А то раньше - где-то подправишь - в другом вылазит. Попробуй-те использовать С++ ! Пишете какой-то виртуальный базовый класс-родитель, который имеет только интерфейс, никакого кода, а потом наследуете каждый конкретный модуль от базового класса и пишете свой, специфический для данного модуля код (т.е. будет класс_А, класс_Б и тд). Константы и перечисления можно запрятать в класс и никто снаружи их не будет видеть. Ну а дальше уже пишите технологию, которая через интерфейс базового класса работает с Вашими модулями. Ну и для пущей уверенности, запихать все по своим пространствам имен (namespace).
|
|
|
|
Сообщений в этой теме
SasaVitebsk Объявления Oct 14 2009, 18:34   SasaVitebsk Цитата(kurtis @ Oct 15 2009, 00:32) Попро... Oct 14 2009, 22:24   dxp Цитата(kurtis @ Oct 15 2009, 04:32) Попро... Oct 15 2009, 04:18 sigmaN Не знаю правда ли, но я недавно прочел такую вещь:... Oct 14 2009, 19:25 sigmaN Ну тут, ИМХО, кроме Вас никто не решит проблему.
Я... Oct 14 2009, 19:43 Faradey как вариант, объедините специфические "переме... Oct 14 2009, 20:03 Dima_G Ранее тоже столкнулся с тем, что большая часть код... Oct 15 2009, 03:09 Flexz Вобщем-то, все что вы предлагаете можно и на С реа... Oct 15 2009, 07:07 Dima_G Цитата(Flexz @ Oct 15 2009, 10:07) ИМХО в... Oct 15 2009, 07:19 dxp Цитата(Flexz @ Oct 15 2009, 14:07) Вобщем... Oct 15 2009, 07:30 Flexz ЦитатаНасчет приведения к (void*) - это путь для в... Oct 15 2009, 08:12 Dima_G Цитата(Flexz @ Oct 15 2009, 11:12) Это эл... Oct 15 2009, 08:42  zltigo Цитата(Dima_G @ Oct 15 2009, 11:42) Отком... Oct 15 2009, 12:22  demiurg_spb Цитата(Dima_G @ Oct 15 2009, 12:42) Кодvo... Oct 15 2009, 15:42   dxp Цитата(demiurg_spb @ Oct 15 2009, 22:42) ... Oct 16 2009, 03:08    demiurg_spb Цитата(dxp @ Oct 16 2009, 07:08) Что вас ... Oct 16 2009, 20:25     Dima_G Цитата(demiurg_spb @ Oct 17 2009, 00:25) ... Oct 17 2009, 08:07 Flexz По теме C vs C++ извините, но.. даже отвечать не х... Oct 15 2009, 08:55 SasaVitebsk Если бы изначально всё продумывалось, то такого бы... Oct 15 2009, 11:53 _Pasha Цитата(SasaVitebsk @ Oct 14 2009, 21:34) ... Oct 15 2009, 15:54 sigmaN Все на столько привыкли к препроцессору, что видим... Oct 16 2009, 06:23 Dog Pawlowa Структуры данных и передача указателей на структур... Oct 16 2009, 19:46 sigmaN Я вот тут призадумался...
А как бы нам так объявит... Oct 17 2009, 12:48 _Pasha Цитата(sigmaN @ Oct 17 2009, 15:48) Но ка... Oct 17 2009, 12:56 Rst7 ЦитатаЯ вот тут призадумался...
А как бы нам так о... Oct 17 2009, 13:24 sigmaN Цитатаю smile.gif Да все так же:
Ну я имел ввиду б... Oct 17 2009, 15:58 Rst7 ЦитатаНу я имел ввиду без использования препроцесс... Oct 17 2009, 17:19 sigmaN ЦитатаАх простите, я не понял.Ну это не удивительн... Oct 17 2009, 21:09
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|