Поддержка более чем одной кодовой базы в ANSI-C - PullRequest
2 голосов
/ 07 марта 2011

Я работаю над проектом со связанной базой кода Ansi-C . (позвольте мне назвать это «основной» кодовой базой).

Теперь я сталкиваюсь с типичной проблемой (изложенной ниже), которую, я полагаю, мне было бы легко решить, если бы у меня был объектно-ориентированный язык.

Проблема заключается в следующем: Мне придется запустить более одной кодовой базы; то есть мне придется начать поддерживать параллельную кодовую базу (возможно, даже больше в будущем). Исходные кодовые базы для всех новых (то есть параллельных) кодовых баз будут первоначально идентичны старой (то есть «основной») кодовой базе.

Поскольку мы говорим о языке 'C', я до сих пор думал о том, чтобы добавить в код операторы '#ifdef' и написать пространственный код ветвления внутри этих блоков 'ifdef'.

В надежде, что я прояснил проблему (достаточно!), Я хотел бы услышать мысли о умных шаблонах, которые помогут мне элегантно решить эту проблему в Ansi C .

Приветствия

Ответы [ 3 ]

2 голосов
/ 07 марта 2011

Что изменится между различными базами кода?

  • Если это просто разные платформы, вы тщательно изолируете зависимости платформы, сохраняя столько же основного кода по всемувсе платформы, насколько это возможно, и помещая информацию о платформе в отдельные файлы.

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

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

Другой ключевой момент заключается в том, чтобы держать все в одном и том же месте.система контроля версий - как можно дольше или на десятилетие или два дольше.

Самое большое бедствие, которое я видел, произошло, когда разные версии перестали использовать общую кодовую базу.Теперь нам нужно реинтегрировать две базы кода, десятилетие отдельной разработки является серьезным препятствием.Предыдущие пятнадцать лет интегрированного развития имели свои взлеты и падения - но ничто по сравнению с проблемой, с которой мы сейчас сталкиваемся.Тьфу!

0 голосов
/ 07 марта 2011

В качестве альтернативы или дополнения к решениям на основе #ifdef вы можете поддерживать различные ветви в SCM.

0 голосов
/ 07 марта 2011

Вы можете абстрагироваться от различий (или хотя бы попробовать). Поместите весь код, специфичный для вашей кодовой базы, в файлы отдельно от логики вашей программы. Затем вы можете использовать условную компиляцию (ifdef-include) и только когда-либо придется заменять файлы, специфичные для кодовой базы, для каждой новой кодовой базы, в то время как вся логика приложения может оставаться неизменной.

...