Как делают меня расположение моя программа C++? (куда я должен поместить.h и .cpp файлы?)

В настоящее время я программирую в Java и использую Знатока вполне немного. Как, таким образом, я стал, приучают к схемам именования и структурам папок, которые я использовал за прошлые 4 или 5 лет.

Поскольку я недавно начал изучать C++, я понимаю, что понятия не имею, куда поместить все мои файлы. Я должен сохранить все сломанным пространством имен, или тем, в каком уровне это находится? Где, например, я сохранил бы серию файлов посвященной UI, как соединено в файлы предназначенный, чтобы помочь хранить данные?

Есть ли какие-либо стандарты для этого вида вещи?

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

8
задан 2 revs 23 February 2010 в 21:29
поделиться

3 ответа

Следующее довольно типично ...

third-party library
  release
    obj
  debug
    obj
  include
  src
    sublib 1
    sublib 2

mylibrary
  release
    obj
  debug
    obj
  include
  src
    sublib 1
    sublib 2

myapp
  release
    obj
  debug
    obj
  subapp 1
  subapp 2

mylittleapp
  release
    obj
  debug
    obj

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

Папки "include" должны содержать IMO только заголовки, которые будут #included другими проектами - внутренние заголовки принадлежат папке "src".

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

Пространства имен - не самая используемая языковая функция, возможно потому, что многие люди так часто используют слово «использование», что они не имеют большого значения. Пространство имен для проекта основной библиотеки имеет смысл, но связывание подпапок с пространствами имен 1: 1 я не видел. Лично у меня есть пространство имен, которое охватывает большую часть кода моей библиотеки, с парой подпространств имен для вещей, которые редко используются в целом, но часто используются в нескольких местах (например, «побитовые» пространства имен). Подпространства имен ограничены одной парой источник / заголовок, поэтому подпапки не нужны. Большая часть выбора для конкретной библиотеки осуществляется путем включения правого заголовка - за исключением того, что я все равно обычно включаю лот через заголовок верхнего уровня основного проекта.

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

Однако, как вы говорите, это не окончательный ответ - конечно, есть незначительные вариации и совершенно разные подходы.

5
ответ дан 5 December 2019 в 21:18
поделиться

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

1
ответ дан 5 December 2019 в 21:18
поделиться

Я разбиваю свои проекты по темам, один каталог для темы:

menu_planner
  src
     recipes
       debug -- contains debug object files and libraries
       release -- contains release object files and libraries
       obsolete -- contains obsolete source files
     ingredients
       debug -- contains debug object files and libraries
       release -- contains release object files and libraries
       obsolete -- contains obsolete source files
     references
       debug -- contains debug object files and libraries
       release -- contains release object files and libraries
       obsolete -- contains obsolete source files
     meals
       debug -- contains debug object files and libraries
       release -- contains release object files and libraries
       obsolete -- contains obsolete source files
     menus
       debug -- contains debug object files and libraries
       release -- contains release object files and libraries
       obsolete -- contains obsolete source files
  docs
     designs

Мой опыт работы с C и C ++ показал мне, что файлы заголовков и source должны находиться в одном каталоге. Часто найти заголовочный файл труднее, если он не находится в том же каталоге, что и исходный файл.

Один каталог (папка) для каждой концепции - хорошая идея. Любое сложное или составное понятие следует разбить на несколько папок или понятий.

Я также научился создавать библиотеки. Я использую библиотеки для хранения кода, который не сильно меняется. Этап связывания выполняется быстрее с библиотеками, чем с каталогами объектных файлов.

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

1
ответ дан 5 December 2019 в 21:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: