LINUX.ORG.RU

Организация кода C++

 , , ,


0

1

Писал в одном C++-файле, но кода стало слишком много и захотелось побить его на смысловые части. Сначала выход казался очевидным — .h позволят сделать не только это, но и производить раздельную компиляцию. Однако возникли проблемы с зависимостями, решил не тонуть в них дальше, а разузнать по-подробнее.

Поделитесь опытом подобного перехода или скажите, как по вашему мнению его лучше осуществить. Основные проблемы — использование множества стандартных библиотек в частях кода, использование заранее объявленных констант.

Важно то, что не считая этих объявлений глобальных переменных, констант и подключённых стандартных библиотек (одной из основных проблем), структура проекта абсолютно древовидна, но частей у неё достаточно много.

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

Возможно, описание вам уже напомнило архитектуру какого-нибудь проекта, тогда подскажите его название.

Используй TDD @ пиши сразу «нормально»

хотелось бы использовать Makefile'ы, но их типичная громоздкость вызывает сомнения в том, что станет удобнее.

Используй cmake

использование множества стандартных библиотек в частях кода

Где тут проблема? Подключай, где нужно, и используй.

использование заранее объявленных констант.

А тут? Положи их в отдельный h/cpp

И то, что ты хочешь сделать - называется рефакторинг. Посему читай про него. Фаулера, например.

kulti ★★ ()

Поделитесь опытом подобного перехода или скажите, как по вашему мнению его лучше осуществить. Основные проблемы — использование множества стандартных библиотек в частях кода, использование заранее объявленных констант.

Портани свой проект на винду.

nikitos ★★ ()

структура проекта абсолютно древовидна

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

Станет. Смело пользуйся.

schizoid ★★★ ()

Писал в одном C++-файле...

ССЗБ

Поделитесь опытом подобного перехода или скажите, как по вашему мнению его лучше осуществить.

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

erfea ★★★★★ ()

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

CrossFire ★★★★★ ()

Определи интерфейсы так, что бы в будущем при расширении проекта не надо было ничего удалять, только добавлять. Пиши в йавастайле - один класс, один объектник. Если классов нет, то раздели свои ф-и логически, прототипы засунь в хидер, реализации в сппешники. Константы можешь в один хидер засунуть. Для констант замени #define на const int/double/char[] (это правда к рефакторингу не имеет отношения).

Поэтому и хотелось бы использовать Makefile'ы

Ты жжошь напалмом. Лепи ещё.

nanoolinux ★★★★ ()

Константы можно либо объявлять в классе, либо предварительная декларация extern const int WINDOW_WIDTH; в заголовке, а в одном из cpp файлов const int WINDOW_WIDTH = 800;

define guards или #pragma once в каждом заголовке; нормальные среды (тот же QtCreator) умеют ставить их самостоятельно.

anonymous ()

Use CMake, Luke.

Ну и «Совершенный код» не помешает почитать.

unfo ★★★★★ ()

- разделяй код на логические модули
- исполъзуй namespaces, pimpl и precompiled headers
- вместо makefile - cmake
- подумай о тестах.

пару полезных книжек тоже можно было бы почитатъ.

JackyTreehorn ()

Ты как-то неправильно разрабатываешь программу вообще, такое ощущение, что тебе совсем незнакомы принципы OOD. Чтобы не погружаться сразу в дебри OOD, попроьуй сначала провести хоть какое-то проектирование сверху-вниз - раздели программу на несколько крупных сущностей и определи взаимодействие между ними. Для каждой сущности создай свою пару cpp+h. Таким образом ты произведешь минимальную объектную декомпозицию, возможно поймешь ее принцип и сможешь двигаться дальше.

m0rph ★★★★★ ()
Ответ на: комментарий от JackyTreehorn

- разделяй код на логические модули
- исполъзуй namespaces, pimpl и precompiled headers
- вместо makefile - cmake
- подумай о тестах.


Плюсую данный комментарий, главное, чтобы ТС понял о чем речь.

m0rph ★★★★★ ()
Ответ на: комментарий от nanoolinux

Для констант замени #define на const int/double/char[] (это правда к рефакторингу не имеет отношения).

constexpr/enum

seed_stil ★★ ()

Делите все на модули (вы вроде о C++ упоминали, надеюсь не просто так).
Не забывайте о forward declaration.
Не забудьте почитать хоть что то о языке, который используете.
Не стесняйтесь думать головой, она не просто способ помещения корма в организм.

andreyu ★★★★★ ()
Ответ на: комментарий от nanoolinux

если твои константы будут участвовать в выражения в других константах, то все посчитается в compile time

seed_stil ★★ ()
Ответ на: комментарий от erfea

ССЗБ

в твоём лице на ЛОРе появилась живая иллюстрация к эффекту Даннинга-Крюгера

просто-таки хрестоматийная

jtootf ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.