Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/34: Рейтинг темы: голосов - 34, средняя оценка - 4.50
-8 / 1 / 2
Регистрация: 04.01.2009
Сообщений: 121

Вынос кода из CPP во внешний файл

04.01.2009, 17:24. Показов 6954. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Используется С Builder 2006
На данный момент структура проекта
http://fierytrance.ru/c/forum/1.png
выделенный файл cpp вырос, хочется раскидать код на несколько файлов. (скажем по крупной функции в отдельный подгружаемый файл).

Как это сделать правильно?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.01.2009, 17:24
Ответы с готовыми решениями:

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

Вынос переменной во внешний запрос
Вообщем возникла такая проблема, стоит на фирме 2003 Акс, и переводим его на MySQL с исп ODBS, вот ситуация: Есть форма в ней на VBA...

Вынос фрагмента кода
Добрый день, господа! Только начал заниматься html (1-й день) и не просек еще некоторых вещей... Есть сайт из n страничек, на...

25
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.01.2009, 17:26
Структура проекта мало о чем говорит. Выдели функции по их виду деятельности по модулям. В .h - объявления, в .cpp - реализация. Потом подключаешь хеадер, где нужно, и используешь функции.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
04.01.2009, 17:28
создаешь для новых файлов хидеры, туда выносишь прототипы функций, в срр пишешь реализации, ну и потом через дериктиву include подключаешь нужные хидеры

упс... Vourhey, не видел твоего ответа
0
-8 / 1 / 2
Регистрация: 04.01.2009
Сообщений: 121
04.01.2009, 19:23  [ТС]
Проект состоит из одной формы, cpp и h файла.
К сожалению, как программист лишь начинающий, в книгах (самоучителях) ничего подобного не расписано.

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

В будущем как понимаю надо будет все функции кидать в отдельные библиотеки, но пока до этого еще не дорос.

Можно чуть подробнее про это
в срр пишешь реализации, ну и потом через дериктиву include подключаешь нужные хидеры
Я не понял, сколько в итоге получится файлов в проекте (и как их создавать).
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.01.2009, 20:49
Цитата Сообщение от romanrex Посмотреть сообщение
Я не понял, сколько в итоге получится файлов в проекте (и как их создавать).
Как разделишь по функциям - столько и получится. Зависит от тебя. А как создавать файлы (новые в проекте, либо создать отдельно и добавить в проект) ты найдешь в документации по среде, в которой работаешь.
0
-8 / 1 / 2
Регистрация: 04.01.2009
Сообщений: 121
04.01.2009, 21:07  [ТС]
Не получается создавать файлы. При переносе текста в них ничего не работает.

Например при создании еще одного cpp+h, h дополнительного файла инклудится в основной, при переносе функции туда, они перестают работать, т.к. не видят форму. Понимаю, что надо еще что-то дописывать куда-то, но что, не знаю.

Второй момент, а если мне нужно перенести не только функцию целиком, а лишь кусок ее? или кусок с переменными?

Есть ли возможность делать прямую вставку кода из внешнего файла?

Например код до
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
float maxg, ming; // частоты из полей
float maxgn, mingn; // частоты из полей
ming=StrToFloat(Edit3->Text);
maxg=StrToFloat(Edit4->Text);
 
mingn=ming*2;
maxgn=maxg/2;
 
if (mingn>=maxgn)
    {
        mingn=ming;
    maxgn=maxg;
        }
Код после
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
float maxg, ming; // частоты из полей
float maxgn, mingn; // частоты из полей
 
<""""вставка кода из внешнего файла X"""">
 
if (mingn>=maxgn)
    {
        mingn=ming;
    maxgn=maxg;
        }
содержание внешнего файла
C++
1
2
3
4
5
ming=StrToFloat(Edit3->Text);
maxg=StrToFloat(Edit4->Text);
 
mingn=ming*2;
maxgn=maxg/2;
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.01.2009, 21:12
Слушай, я смотрю на твой код и понимаю, что ты, практически, не знаешь С++. Почитай статьи про заголовочные файлы С++ и их создание. В интернете полно. Описывать здесь все это мне откровенно лень.
0
-8 / 1 / 2
Регистрация: 04.01.2009
Сообщений: 121
04.01.2009, 22:02  [ТС]
Не хочется показаться грубым.
Почему стоит задать простой вопрос, как на него ответы в духе "почитай книги". А когда приводишь список 10 книг и выкладок из них, которые не работают в принципе, появляется второй совет, "пробуй делать как получается, ничем помочь не можем, сами когда так начинали, смотрели там, сям и что-то делали".

Если лень ответить, то зачем вообще отвечать?

На данный момент надо лишь разбить крупный файл на мелкие. Лишь потом будет нормальная оптимизация. Неужели нет простой команды вставки кода из внешнего файла, допустим temp.txt?

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

Добавлено через 11 минут 25 секунд
В код вставлено
C++
1
#include "temp.txt"
Файл temp.txt лежит в папке Debug_Build, (другие инклуды на картинки и т.п. оттуда подгружаются нормально в соответствующие функции/объекты )
В тело же cpp файла temp.txt не подгружается, пишет
[C++ Error] raa2.cpp(459): E2209 Unable to open include file 'temp.txt'
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.01.2009, 22:13
Да потому что вам лень читать и вы лезете со всякими вопросами, о которых написано везде и кругом. Вопрос простой. Так же я могу задать простой вопрос "ой, а объясните мне в двух словах, как написать программу". Кранты...
Выделяй свой код в функцию. Функцию в заголовочный файл. Заголовочный файл в область видимости компилера (где стандартные инклуды, либо, где сам исходник). Подключай и юзай функцию. Вас че, как котят носом тыкать?
ты даже вообще ничего не читал, если свой файл заголовочный как .txt обзываешь. Если ты сам не стремишься ничего узнать, я не собираюсь тебя за уши тащить.

P. S. "глупых вопросов не бывает, бывают глупые люди..."

Добавлено через 3 минуты 19 секунд
http://www.csu.ac.ru/~dem/lang... odule.html
удели время.
0
-8 / 1 / 2
Регистрация: 04.01.2009
Сообщений: 121
04.01.2009, 22:27  [ТС]
Я не спрашиваю, как код кинуть в отдельную функцию, а функцию в отдельный файл. temp.txt не является заголовочным файлом. Неужели сложно внимательно прочитать вопрос?

Вопрос
Как вставить произвольный кусок кода, из отдельного файла.

Для тех, кто читает по диагонали еще пара примеров.

Полное содержание temp.txt

C++
1
2
3
4
5
6
7
8
9
10
11
                break;
                case 1: // выбрана лог сетка с удвоением
            ComboBox1->ItemIndex=1;
            break;
        }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ComboBox1Select(TObject *Sender)
{
    switch (ComboBox2->ItemIndex)  // выбрана лог сетка с удвоением
Это ПРОСТО ПРОИЗВОЛЬНЫЙ КУСОК КОДА. Который должен подгрузится в нужное место в основном файле.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.01.2009, 22:48
ты че, слепой совсем? Я те ссылку дал же! Там же все написано и пример дан. Иди на фиг С++ учи... мля, ну ты и написал...

Добавлено через 4 минуты 52 секунды
Я тебе подскажу. Никак.
0
-8 / 1 / 2
Регистрация: 04.01.2009
Сообщений: 121
04.01.2009, 23:07  [ТС]
Действительно, помочь не сможете, раз не можете даже прочитать внимательно вопрос. А вы сами тот пример по ссылке читали? Там только про создание модулей. Про простую вставку кода ни слова.

Для особо внимательных - include должен работать как PHP, без всяких ограничений вроде "следует помнить, что все описанные в теле модуля константы и типы данных не будут доступны в используемой этот модуль программе"
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
05.01.2009, 01:12
romanrex, да нет такой вставки, которую ты хочешь... и вообще выносить методы класса в отдельный файл не стоит ИМХО... если у тебя есть просто функции какие-то, их можно вынести в отдельный файл... я для таких функций обычно создают functions.cpp... раз уж так сложно тебе понять, выложи код, посмотрим, как его можно разбить...
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
05.01.2009, 01:17
romanrex, я же тебе уже написал выше, что никак Или тебе надо 36 size и красным шрифтом?

WooDooMan, ему ж не разбить надо. Это чудо хочет код как копипастом код вырезал, код вставил...иглавное упертый такой, что я аж злой...
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
05.01.2009, 01:22
Vourhey, вроде бы задание по-другому звучало, или это в процессе обсуждения выяснилось?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
05.01.2009, 01:28
Задание-то звучало, а ты посмотри на его пример на первой странице, что он там хочет...
Там только про создание модулей. Про простую вставку кода ни слова.
жесть
Лан, пофиг, я уже забил ) дохлый номер...
0
-8 / 1 / 2
Регистрация: 04.01.2009
Сообщений: 121
05.01.2009, 01:43  [ТС]
Во время отладки программы код растет, т.к. подробно даются комментарии, создается ворох временных переменных. В итоге код становится большим, и когда идет работа над определенным местом, просмотр чего-то вдали (например переменных, которые в двух местах - самом начале cpp файла, и в начале функции) приводит к неудобным прокруткам туда-обратно. Потом когда код отлажен, лишнее вычищается и код становится значительно меньше. Но работать очень не удобно.

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

Если такие инклуды невозможны, возможно ли вручную настраивать сворачивание кода в Builder 2006?
К сожалению в Builder возможность сворачивать куски кода работает странно. По умолчанию работает на автомате и как я понял, должно определяться именно начало и конец функции и соответственно целиком функцию сворачивать (что полезно лишьчастично). Вот как здесь
http://fierytrance.ru/c/forum/3.png

Обычно несколько первых так определяется для сворачивания, а потом остальные определяются как попало.

http://fierytrance.ru/c/forum/2.png

Если бы это можно было бы настроить вручную, то возможно было бы нормальным выходом для меня.

P.S. - сама программа нормально работает. Разбивать файл на функции буду позже, когда отработаю основной функционал.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
05.01.2009, 01:54
По-моему, это поддерживается только C# и Delphi с помощью комментариев region и endregion. По крайней мере, применения в билдере не видел еще...
0
-8 / 1 / 2
Регистрация: 04.01.2009
Сообщений: 121
05.01.2009, 01:57  [ТС]
Vourhey
C++
1
я же тебе уже написал выше, что никак
Изначально имелось в виду, что выносится код в отдельный файл, и возможно не просто случайный код, а в него отдельную функцию.

На это для частного случая даны ответы про создание cpp+h (вынос функции целиком).

Далее я уточнил, что нужно не такое решение.

И вот вопрос, в каком посте написано, что так делать нельзя?

https://www.cyberforum.ru/post89552.html
Было сказано, что язык С++ мне неизвестен, и надо искать что-то про заголовочные файлы.

https://www.cyberforum.ru/post89569.html
опять про cpp+h

https://www.cyberforum.ru/post89585.html
еще раз

и нигде ни слова, что такое невозможно. Лишь только болезненный смех


Вот найдет по поиску эту тему еще кто-то, кому понадобится так же именно удобно работать с кодом, и будет он читать всякую фигню вместо конкретного решения...
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
05.01.2009, 02:07
По-моему, ты просто сам не знаешь, что тебе надо. То код, то функции, то свертка. Определись, наконец. А С++, все же, учи.
Ах, да. Болезненный смех забыл -
Повторить?

Добавлено через 3 минуты 12 секунд
Цитата Сообщение от Vourhey Посмотреть сообщение
Добавлено через 4 минуты 52 секунды
Я тебе подскажу. Никак.
Если ты это не видел, это не мои проблемы.

Добавлено через 1 минуту 5 секунд
Вообщем, попробуй глянуть в сторону regions, но не думаю, что билдер их поддерживает.
Куски кода ты в файл не вынесешь.
Про создание модулей ссылка у тебя есть.

P. S. теперь на все вопросы ответил?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.01.2009, 02:07
Помогаю со студенческими работами здесь

Вынос кода в именованную функцию
Добрый день. Есть обработчик события: $(document).ready(function () { $(document).on('click', &quot;.myClass&quot;, function (e) { //...

Как вызвать в основном .cpp файле тот или иной .cpp файл
Ну, обычно я работал с одним .cpp но вот появилась надобность в основном файле написать интерфейс простенький и выбор одного из 2х...

Вынос кода программы в файлы проекта
Не знал как правильно сформулировать название темы, извините. Суть. У меня на Form1 получилось много кода, поскольку будет еще код,...

Вынос DTD в отдельный файл.
Есть XML: &lt;?xml version = '1.0' encoding = 'UTF-8'?&gt; &lt;!DOCTYPE config &gt; &lt;config&gt; ... некий XML ... ...

Вынос класса в отдельный файл
Использую MS VS 2013 Ultimate Учусь программировать, решил попробовать написать морской бой. Решил создать класс игрока, в котором бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru