Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.58
MaxFX
2 / 2 / 0
Регистрация: 22.10.2010
Сообщений: 37
#1

Разбитие программы на файлы - C++

30.01.2012, 20:53. Просмотров 1706. Ответов 6
Метки нет (Все метки)

Здравствуйте.

Подскажите пожалуйста как разбить консольное приложение на два и более файла? Я хочу чтоб у меня был центральный файл который по мере надобности запускал другие файлы. То есть так же как и главная функция которая может запускать другие функции. Так как я никогда ничего подобного не делал то сразу возникает кучка вопросов:

В какой формат сохранять файлы?
Как заставить главный файл запустить другие файлы (специальная функция или команда)?
Что писать в остальных файлах (должна ли у них быть своя функция main)?

Спасибо за внимание.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2012, 20:53     Разбитие программы на файлы
Посмотрите здесь:

Разбитие на заголовочные файлы - C++
Здравствуйте! Имеется вот такая програмка : #include<iostream> #include<windows.h> #include<string.h> #include<stdio.h> using...

Разбитие на заголовочные файлы - C++
Здравствуйте! Имеется вот такая програмка : #include "stdafx.h" #include <iostream> #include <stdio.h> using namespace std; ...

Разбитие числа на цифры - C++
Нужно дабы пользователь вводил 5значное число, а "программа" это число делила на цифры. Наиболее простой принцип решения данной задачи для...

Разбитие кода на отдельные части - C++
#include <iostream> #include <conio.h> #include <ctime> int sec(0); int minu(0); int chas(0); int B = 1; int...

С++, Разбитие файла, битый файл, Файловый поток - C++
Суть, нужно разбить файл,(у многих будут болеть глаза от этого кода, так что извиняюсь, это просто сырой кусок кода, относитесь так к...

Ввод числа и разбитие его на отдельные цифры - C++
Доброе время суток. Решил сделать себе задачку и попробовать решить ее, но увы, не осилил. Задача заключается в том, чтоб пользователь...

Разбиение программы на файлы - C++
Возникла проблема в тривиальной задаче. Создал шаблонный класс вектор, который работает если в одном файле. Стоить разбить на файлы...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
StasGamilton
Эксперт по пяченькам
67 / 67 / 1
Регистрация: 16.08.2011
Сообщений: 258
31.01.2012, 00:55     Разбитие программы на файлы #2
Для Си
Пример - в программе две функции function1(), function2()
Можно описать в одном файле так:

файл main.c
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <заголовочный файл>
....
 
void function1();     //объявления
void function2();
 
main()
{
....
function1(); //вызов
....
function2();
...
}
 
void function1()     //описание функции
{
 ....
}
 
void function2()
{
   ...
}
тогда можно так

файл function.h
C
1
2
3
4
5
#include <заголовочные файлы.h>  // не всегда нужно
...
 
void function1();   //объявление функций
void fucntion2();
файл function.c
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <заголовочные файлы.h>
...
#include "function.h"
 
void function1()     //описание функции
{
 ....
}
 
void function2()
{
   ...
}
файл main.c
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <заголовочные файлы.h>
....
#include "function.h"
 
main()
{
   ...
   function1();
   ...
   functiin2();
   ....
}
Добавлено через 10 минут
Суть в том что функции (классы - для С++) распределяются по файлам, в файле .h пишут сигнатуру функций или описывают класс, а в файлах .c или .cpp пишут сам код (не всегда так - можно и в .h писать код, но не советую, так намного логичнее и проще, плюс могут возникнуть проблемы).
В других файлах не должно быть функции main!
Форматы - .h, .c, .cpp (вроде еще где-то видел .hpp - но я точно не скажу, не пользовался).
Чтобы заставить главный файл использовать функции из других файлов, в нем должен быть прописано
C
1
#include "нужный файл.h"
здесь прописывается путь к файлу, если все в одной папке можно только имя файла, либо относительный путь.
И можно использовать функции из тех файлов, как-будто они описаны в главном файле)

Добавлено через 6 минут
Ой чуть не забыл, в .h файле надо написать (в небольших программах не всегда нужно - но лучше использовать всегда)

C
1
2
3
4
5
6
7
8
#ifndef FILE_TAKOY_TO_H  // можно и другое название придумать - главное чтобы оно было уникальным
#define FILE_TAKOY_TO_H
 
.....
// Код написанный в загаловочном файле
.....
 
#endif
MaxFX
2 / 2 / 0
Регистрация: 22.10.2010
Сообщений: 37
01.02.2012, 19:21  [ТС]     Разбитие программы на файлы #3
Большое спасибо!!!

Объяснили вы понятно, но только на практике у меня что то не получается. В заголовочном файле functions.h пишу следующие:
C
1
2
3
4
5
6
7
8
9
10
11
#ifndef <functions.h>
#define <functions.h>
 
 
 
void welcome ();
void get_data ();
int calculations ();
void print_data ();
 
#endif
И тут же компилятор сердится мол "expected an identifier" какой ещё идентификатор ему нужен?

Помимо этого центральный файл не хочет открывать заголовочный файл, пишет что "нет такого файла", не смотря на то что оба файла в одной и той же папке.

И ещё вопросик:
Если я объявляю глобальную переменную в главном файле сможет ли под файл с ней работать?
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
01.02.2012, 19:58     Разбитие программы на файлы #4
Цитата Сообщение от MaxFX Посмотреть сообщение
Помимо этого центральный файл не хочет открывать заголовочный файл, пишет что "нет такого файла"
Объявили неправильно. Заголовочные файлы ведь пользовательские.
C++
1
2
3
4
5
6
7
8
9
// так неправильно
#ifndef <functions.h>
#define <functions.h>
 
// так правильно
#ifndef FUNCTIONS
#define FUNCTIONS
#include "functions.h"
#endif
Цитата Сообщение от MaxFX Посмотреть сообщение
...не смотря на то что оба файла в одной и той же папке.
Одно дело, когда они в одной папке и совсем другое, когда они добавлены в проект


Цитата Сообщение от MaxFX Посмотреть сообщение
И ещё вопросик:
Если я объявляю глобальную переменную в главном файле сможет ли под файл с ней работать?
Нет.
В телах функций, лежащих в подфайлах, объявляйте свои переменные, ну а в главном файле вызывайте их, по надобности передавая глобальную переменную.
Либо объявите эту переменную в заголовочном файле и его подключайте к остальным. Тогда уже переменная будет доступна всем.
MaxFX
2 / 2 / 0
Регистрация: 22.10.2010
Сообщений: 37
01.02.2012, 21:22  [ТС]     Разбитие программы на файлы #5
Спасибо за разъяснения.

Заголовочный файл объявил как вы сказали - все заработало. Только глобальные переменные объявленные в заголовочном файле капризничают, цитирую:

error LNK2005: "int x1" (?x1@@3HA) already defined in functions.obj

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

Во общем мне нужно добиться одного из двух: либо объявить глобальные переменные чтоб у всех файлов был к ним доступ. Либо заставить функции возвращать больше одного параметра. Посоветуйте пожалуйста как такое реализовать.
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
01.02.2012, 21:49     Разбитие программы на файлы #6
Цитата Сообщение от MaxFX Посмотреть сообщение
Во общем мне нужно добиться одного из двух: либо объявить глобальные переменные чтоб у всех файлов был к ним доступ. Либо заставить функции возвращать больше одного параметра. Посоветуйте пожалуйста как такое реализовать.
Передавайте адрес переменной в функцию.
Например, нужно изменить значение a и b:
C++
1
2
3
4
5
6
7
8
// объявление функции
void func(int &a, int &b); // & показывает, что будем работать с переменной "напрямую"
....
//в функции main()
int a=5, b=3;
...
func(a, b);
// В итоге, все изменения переменных "сохранятся".
Добавлено через 11 минут
Цитата Сообщение от MaxFX Посмотреть сообщение
Только глобальные переменные объявленные в заголовочном файле капризничают
Их тоже так просто не объявишь
Если переменная должна быть объявлена во всех подфайлах (давайте уже правильно выражаться - модулях), то нужно снова работать с #ifndef/#endif
Для этого можно было бы создать отдельный модуль global.h
C++
1
2
3
4
5
6
#ifndef GLOBAL
#define GLOBAL
 
extern int x1;
 
#endif
Ну и инициализировать их в отдельном модуле global.cpp
C++
1
2
#include "global.h"
x1 = 0;
Ну и подключать их в нужных модулях.
Все же, не советую так играть с глобальными переменными. Раз такая надобность в изменении переменных, то лучше передавать их по адресу. Так надежнее, да и заморочек меньше.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2012, 22:06     Разбитие программы на файлы
Еще ссылки по теме:

По разбиению программы на файлы - C++
Хочу написать программу, так что бы отдельные функции был и записаны в различные файлы, как это реализовать? и что делать с глобальными...

Разбиение программы на файлы С++ - C++
Здравствуйте! У меня не получается линейный алгоритм своей программы разбить на два файла именно следующим образом. В первом будет...

Разделение программы на файлы - C++
Всем привет. Изучаю алгоритмы сортировки. Вот что уже написал: //sort.cpp #include &quot;sort.h&quot; template &lt;class T&gt; void...

Разбитие массива на некое количество подмассивов одинаковой длинны - C++
Здравствуйте. Для решения моей основной задачи требуется разбитие массива на некое количество подмассивов одинаковой длинны. Проблема в...

Разработка программы сохраняющей в файлы в word - C++
Доброго времени суток, уважаемые программисты. Хотелось бы услышать ваш совет в такой непосильной для меня задаче. Надо сделать программу,...


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

Или воспользуйтесь поиском по форуму:
MaxFX
2 / 2 / 0
Регистрация: 22.10.2010
Сообщений: 37
01.02.2012, 22:06  [ТС]     Разбитие программы на файлы #7
Огромное спасибо, теперь все работает!!!
Yandex
Объявления
01.02.2012, 22:06     Разбитие программы на файлы
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru