<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433537&amp;view=findpost&amp;p=3887638</guid>
        <pubDate>Sun, 12 Mar 2023 11:34:30 +0000</pubDate>
        <title>Как грамотно разбить программу на несколько файлов?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433537&amp;view=findpost&amp;p=3887638</link>
        <description><![CDATA[Feldsher: Все соберется в 1 EXE после компиляции и компоновки, разбивать как удобнее]]></description>
        <author>Feldsher</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433537&amp;view=findpost&amp;p=3887462</guid>
        <pubDate>Thu, 09 Mar 2023 10:39:39 +0000</pubDate>
        <title>Как грамотно разбить программу на несколько файлов?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433537&amp;view=findpost&amp;p=3887462</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=433537&view=findpost&p=3887446'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Gene1982 &#064; <time class="tag-quote__quoted-time" datetime="2023-03-09T08:10:27+00:00">09.03.23, 08:10</time></span><div class='quote '>.. хочется узнать, как грамотно и профессионально разбить эту программу.</div></div><br>
Главное, чтобы тебе было удобно.<br>
---<br>
Объединять функции в модули можно по функциональному назначению.<br>
Например, обслуживание настроек - свой модуль, COM-порт - свой модуль,<br>
мат-вычисления... итд.<br>
---<br>
Если будем делить проект на модули, тогда создадим хеадер с прототипами,<br>
которые представлены группами. С указанием модуля, к которому они принадлежат.<br>
В идеале, прототипы даже перечислены должны быть в том же порядке, как функции размещены в модуле.<br>
Так легче отыскивать функции при сопровождении большого проекта.<br>
---<br>
Все определения сделаем в хеадерах, все хеадеры разместим в одном файле.<br>
Например, &quot;project.h&quot;<br>
---<br>
В модуль с функцией &quot;main&quot; больше ничего не будем добавлять.<br>
Этот модуль так и назовём &quot;main.c&quot;<br>
---<br>
И ещё мне понравилось - прочитал в Сети:<br>
&quot;Плохо, когда функция main не влезает в экран&quot;<br>
На мой взгляд, это касается любой функции.<br>
Но без экстремизма, по возможности.<br>
Возможности бывают разные.<br>
---<br>
Однажды я видел, как мужик подключил к Виндусу 2-й монитор<br>
16x9 и поставил его набок. Если мелким фонтом, тогда можно<br>
делать функции очень длинными.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433537&amp;view=findpost&amp;p=3887454</guid>
        <pubDate>Thu, 09 Mar 2023 10:08:56 +0000</pubDate>
        <title>Как грамотно разбить программу на несколько файлов?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433537&amp;view=findpost&amp;p=3887454</link>
        <description><![CDATA[Majestio: Для такого объема особого смысла в разбиении нет - слишком мало кода. Но по фэн-шую надо бы завести себе определенные правила, которые в будущем помогут не путаться в коде. Приведу некоторые, но это не стандарт и не абсолют конечно&#33;<br>
<br>
<ol class="tag-list" type="1"><li>При создании проекта сразу строить грамотную файловую иерархию проекта. Среди моих обязательных подкаталогов - <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">docs</span></span>, <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">src</span></span>, <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">tests</span></span>. Названия говорят сами за себя;</li><li>В подкаталоге <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">src</span></span> содержится весь исходный код проекта. Ему также нужна иерархия - в корне этого подкаталога, скажем так, &quot;общие файлы проекта&quot;, в подкаталогах типа <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">net</span></span>, <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">db</span></span>, <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">math</span></span> - файлы проекта, сгруппированные по назначению;</li><li>В тематических подкаталогах исходного кода давать файлам уникальные имена, используя префикс, типа <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="green" style="color: green">db-common.c</span></span>, <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="green" style="color: green">net-common.c</span></span> &amp; etc. Но не <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="red" style="color: red">common.c</span></span> - потом при поиске будет неудобно.</li></ol><br>
<strong class='tag-b'>Отдельно про дробление кода по файлам</strong><br>
<br>
В идеале - нужна одна функция на одну единицу трансляции (на файл), особенно если потом все это собираешь в собственные библиотеки. Этим самым облегчается задача линкеру - брать в исполняемый файл только тот код, который задействован в программе, неиспользуемые функции не включать. &quot;Мертвого кода&quot; не будет изначально, даже не используя специальные ключи сборки. Но, как я написал сразу - это в идеале. Потому как количество файлов уже в среднем проекте будет достаточно большим. Поэтому нужен компромисс - объединять в файлах функции, которые всегда работают вместе, и разделять их по файлам смысла нет. Например, <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="violet" style="color: violet">open_db</span></span> и <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="violet" style="color: violet">close_db</span></span>. По отдельности их обычно не используют - поэтому их в один файл. Четких определений разделения нет, но вот такая концепция имеет место. Но это мой личный подход, народ имеет свои взгляды и вариации :rolleyes:]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433537&amp;view=findpost&amp;p=3887446</guid>
        <pubDate>Thu, 09 Mar 2023 08:10:27 +0000</pubDate>
        <title>Как грамотно разбить программу на несколько файлов?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433537&amp;view=findpost&amp;p=3887446</link>
        <description><![CDATA[Gene1982: Я пишу программу, которая находится в одном C файле, содержит около 1000 строк и 16 функций.<br>Я добавляю новые функции и программа постепенно увеличивается. Не могу сказать, какой объем будет у программы в итоге.<br>Я не профессионал в программировании, поэтому хочется узнать, как грамотно и профессионально разбить эту программу. Надо ли делать отдельные C файлы для каждой функции или делать отдельные C файлы для нескольких функций, или вообще не стоит разбивать на несколько файлов программу такого объема?]]></description>
        <author>Gene1982</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	