Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

Спасибо за внимание.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2012, 20:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разбитие программы на файлы (C++):

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

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

Разбитие на фунции - C++
Нужна помощь, разбить каждое подписанное действие на функции #include <iostream> #include <iostream> #include <ctime> using...

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

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

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

6
StasGamilton
Эксперт по пяченькам
67 / 67 / 1
Регистрация: 16.08.2011
Сообщений: 249
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
1
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" какой ещё идентификатор ему нужен?

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

И ещё вопросик:
Если я объявляю глобальную переменную в главном файле сможет ли под файл с ней работать?
0
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 Посмотреть сообщение
И ещё вопросик:
Если я объявляю глобальную переменную в главном файле сможет ли под файл с ней работать?
Нет.
В телах функций, лежащих в подфайлах, объявляйте свои переменные, ну а в главном файле вызывайте их, по надобности передавая глобальную переменную.
Либо объявите эту переменную в заголовочном файле и его подключайте к остальным. Тогда уже переменная будет доступна всем.
0
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

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

Во общем мне нужно добиться одного из двух: либо объявить глобальные переменные чтоб у всех файлов был к ним доступ. Либо заставить функции возвращать больше одного параметра. Посоветуйте пожалуйста как такое реализовать.
0
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;
Ну и подключать их в нужных модулях.
Все же, не советую так играть с глобальными переменными. Раз такая надобность в изменении переменных, то лучше передавать их по адресу. Так надежнее, да и заморочек меньше.
0
MaxFX
2 / 2 / 0
Регистрация: 22.10.2010
Сообщений: 37
01.02.2012, 22:06  [ТС] #7
Огромное спасибо, теперь все работает!!!
0
01.02.2012, 22:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2012, 22:06
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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