Мнения относительно практики программирования на C++

У меня есть программа, которую я пишу, не слишком большой. Кроме основной функции, это имеет приблизительно 15 других функций, которые призвали к различным задачам неоднократно. Код работает просто великолепно все в одном файле, и как это прямо сейчас.

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

Я не являюсь новым в C++, но определенно не эксперте также, поэтому если Вы думаете, что этот вопрос глуп, не стесняйтесь говорить мне так.

Спасибо за внимание!

8
задан Péter Török 19 April 2012 в 06:42
поделиться

8 ответов

Зависит от размера этих функций. Если ваш исходный файл начинает иметь длину более нескольких сотен строк кода, есть причина извлечь часть функциональности в один (или несколько) отдельных файлов.

Если вы можете сгруппировать функции в отдельные наборы на основе их ответственности и / или уровня абстракции, вы можете предпочесть разделить их на отдельные физические файлы (и, конечно, классы) по этим линиям. Например. некоторые функции могут работать с файловым вводом-выводом, в то время как другие выполняют некоторые вычисления. Или некоторые функции выполняют рутинную работу по переключению битов низкого уровня в файловом вводе-выводе, в то время как другие основываются на первом для реализации некоторых более абстрактных функций.

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

7
ответ дан 5 December 2019 в 11:23
поделиться

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

3
ответ дан 5 December 2019 в 11:23
поделиться

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

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

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

Поскольку вы упомянули только функции, я предполагаю, что ваша программа не является объектно-ориентированной. Если бы это было так, я бы посоветовал иметь один класс на пару .h / .cpp. В вашем случае это зависит от того, можно ли эти функции сгруппировать в 2 или более подмножества. Если это так, я бы объединил связанные функции в отдельные модули .cpp и всегда имел соответствующий заголовок .h, содержащий их прототипы.

Наличие всех этих 15 функций в одном модуле не обязательно является правильным или неправильным. Опять же, если все они сильно связаны, они должны принадлежать одному модулю. Еще одно правило, которое необходимо решить, - это сам размер модуля. Мне трудно управлять модулем, который вырос до более чем 1000 строк, этот порог является предупреждающим знаком, что его следует разделить. Эти две вещи связаны, обычно, когда модуль становится таким большим, он также, вероятно, имеет две или более отдельных групп функций.

2
ответ дан 5 December 2019 в 11:23
поделиться

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

Что касается кода, то обычно не имеет никакого значения, где находится физический код, поскольку все заканчивается в одном месте (ваша общая библиотека / DLL или исполняемый файл).

0
ответ дан 5 December 2019 в 11:23
поделиться

Предполагая, что каждая функция довольно мала, нет смысла разделять ее между файлами, ИМО.

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

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

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

Кроме этого, ИМО, не беспокойтесь.

М.

0
ответ дан 5 December 2019 в 11:23
поделиться

Я бы сказал, что если вам понадобится использовать Ctrl + F , чтобы найти нужную функцию, вероятно, пора начать разбивать файл на части.

Аналогичным образом, если вам нужно использовать Ctrl + F для поиска определенного фрагмента кода в длинной функции, вероятно, пора начать разделять его на несколько функций (или поработать над написанием более краткого код).

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

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

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

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