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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
Taras_Z
100 / 84 / 2
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
#1

С++ .h файли - C++

07.03.2012, 14:20. Просмотров 1790. Ответов 10
Метки нет (Все метки)

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

Файли - Pascal
Исходный файл представляет собой набор записей следующего вида: Фамилия, имя, отчество Дата рождения Пол Домашний адрес:город,...

Файли Lisp - Lisp
(defun cocha (file char) (with-open-file (str file) (loop for line = (read-char str ()) ...

Файли Lisp - Lisp
Помогите написать програмку на Сommon Lispe: Распечатать количество букв sym в файле name. За рание спасибо!

Файли{text} - Turbo Pascal
Эта задача читает с файла числа, и суммирует минимальное и максимальное значение, а как эту сумму записать в данный файл???

c# txt файли - C#
напишити кто-то алгоритм работы с txt файлом! считывание из файла в лейбл циклически! до символа #! при нажатии на кнопку считывается все...

Файли Lisp - Lisp
Помогите написать на Сommon Lispe програму: Распечатать файл в обратном порядке, если его элементы являются атомами.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Evg
Эксперт CАвтор FAQ
17810 / 6016 / 388
Регистрация: 30.03.2009
Сообщений: 16,531
Записей в блоге: 26
07.03.2012, 14:32 #2
> Зачем нужны заголовочние файли?

Чтобы сваливать в них общие описания, которые должны подцепляться в нескольких файлах

> Чем они отличаются от просто файлов?

Принципиально - ничем

Для чего нужен define?
Си, использование вложенных файлов *.c
0
dimcoder
Полярный
462 / 434 / 68
Регистрация: 11.09.2011
Сообщений: 1,133
07.03.2012, 14:33 #3
Цитата Сообщение от Taras_Z Посмотреть сообщение
Зачем нужны заголовочние файли?
http://ru.wikipedia.org/wiki/%D0%97%...B0%D0%B9%D0%BB
В общем там объявлены, и возможно описаны, функции, классы, может быть переменные для использования в подключающей программе.

Цитата Сообщение от Taras_Z Посмотреть сообщение
как ее можно разделить на 3 части
Создаете заголовочный файл (в вашем случае 2) и выносите в него объявления и описания ваших функций. Так же надо сделать защиту от повторного объявления, весь код в заг файле обрамляете в код вида:
C++
1
2
3
4
#ifndef NAME_H       //Это чтобы не объявлялся заг файл 2 раза при записи вида #include <name.h>   
#define NAME_H                                                          #include <name.h>   //Это уже бессмысленная строка, т.к уже был объявлен такой же файл
//здесь описание функций и объявление
#endif
В третий файл делаете так
C++
1
2
#include <name.h>
#include <name2.h>

Не по теме:

Evg, извиняюсь, пока писал, уже ответили.

0
Evg
Эксперт CАвтор FAQ
17810 / 6016 / 388
Регистрация: 30.03.2009
Сообщений: 16,531
Записей в блоге: 26
07.03.2012, 14:38 #4
dimcoder, не пори чушь и не приучай человека заниматься неправильными вещами
0
Taras_Z
100 / 84 / 2
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
07.03.2012, 14:46  [ТС] #5
а как тогда правильно?
0
dimcoder
Полярный
462 / 434 / 68
Регистрация: 11.09.2011
Сообщений: 1,133
07.03.2012, 14:48 #6
Evg, я всего лишь ответил на вопрос
Цитата Сообщение от Taras_Z Посмотреть сообщение
тоесть одни функции туда а одни туда и с третей все подключается.
пусть и не как Лев Толстой.
И какие по вашему
Цитата Сообщение от Evg Посмотреть сообщение
правильные вещи
?
0
Evg
Эксперт CАвтор FAQ
17810 / 6016 / 388
Регистрация: 30.03.2009
Сообщений: 16,531
Записей в блоге: 26
07.03.2012, 14:52 #7
Цитата Сообщение от dimcoder Посмотреть сообщение
И какие по вашему
В посте #2 последняя ссылка

Разбиение исходника на отдельные файлы делается по двум причинам:
1. Упростить процесс написания и чтения программы. С десятком коротких файлов, разбитым по лигической функциональности, работать проще, чем с одним большим файлом, куда свалено абсолютно всё.
2. Ускорить процесс сборки. Если мы поменяли внутренности функции из одного файла, то хотелось бы, чтобы оставшиеся 9 файлов не надо было перекомпилировать.

Твой вариант является самой распространённой ошибкой начинающих. Он, очевидным образом, не удовлетворяет пункту 2. Представь себя, если бы твоим способом было написано ядро линкса (несколько десятков мегабайт в исходнике). Тогда после каждого исправления нужно было бы несколько десятков минут заниматься перекомпиляцией (если вообще хватило бы памяти, чтобы такой объём компилировать за раз).
0
Taras_Z
100 / 84 / 2
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
07.03.2012, 14:59  [ТС] #8
вот я делаю из за пункта 1
пока меня 2 не интересует
спасибо
0
Evg
Эксперт CАвтор FAQ
17810 / 6016 / 388
Регистрация: 30.03.2009
Сообщений: 16,531
Записей в блоге: 26
07.03.2012, 15:13 #9
Цитата Сообщение от Taras_Z Посмотреть сообщение
вот я делаю из за пункта 1
Дело хозяйское. А потом начинаются вопросы из разряда (утрированно): "я фарфоровой кружкой забивал гвоздь и не могу понять, почему гвоздь не забился, а кружка разбилась"

Добавлено через 4 минуты
dimcoder, если взять твой способ, то, на твой взгляд, зачем в твоём примере нужны конструкции типа "#ifndef NAME_H"?
0
dimcoder
Полярный
462 / 434 / 68
Регистрация: 11.09.2011
Сообщений: 1,133
07.03.2012, 15:28 #10
Цитата Сообщение от Evg Посмотреть сообщение
dimcoder, если взять твой способ, то, на твой взгляд, зачем в твоём примере нужны конструкции типа "#ifndef NAME_H"?
Ну скажем, создам я заголовочный файл name.h, а в нем напишу
C++
1
2
3
4
int func(int x)
{
   return x*10;
}
И напишу в программе:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <cstdlib>
#include <iostream>
#include <name.h>
#include <name.h>
using namespace std;
 
int main(int argc, char *argv[])
{
    cout << func(10) << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
Ошибка: redefinition of int func(int)
А если напишу в заголовочном файле так:
C++
1
2
3
4
5
6
7
#ifndef NAME_H
#define NAME_H
int func (int x)
{
    return 10*x;
}
#endif
То ошибка пропадает.
Просто при подключении множества файлов, вполне вероятно, что они будут использовать одну и ту же библиотеку, и что бы не вылазило такой ошибки для этого и нужно так делать.

PS Это на мой взгляд
0
Evg
Эксперт CАвтор FAQ
17810 / 6016 / 388
Регистрация: 30.03.2009
Сообщений: 16,531
Записей в блоге: 26
07.03.2012, 15:34 #11
Цитата Сообщение от dimcoder Посмотреть сообщение
И напишу в программе
А ты не пиши так в программе. Потому как два раза написать #include ничем не отличается от того, что ты два раза напишешь "int x;".

Цитата Сообщение от dimcoder Посмотреть сообщение
PS Это на мой взгляд
"#ifndef NAME_H" нужен именно при "нормальной" реализации. Когда код выделяют в отдельные модули, а в .h выделают интерфейсы модуля. В твоём случае ты просто разбил длинный текст на несколько коротких. Тут никакие ifndef'ы и не нужны. Хуже от них не будет, но реально не нужны
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2012, 15:34
Привет! Вот еще темы с ответами:

Файли.Гистограмма - Turbo Pascal
МОжет кто поможет а то не знаю как делать.. Придположения через структуры... Составить программу которая печатает гистограмма...

Текстовие файли - Pascal
Существуют 2 текстовые файлы в которые записаны латинские литери. Создать новый файл в который записать сначала все элементы первого файла...

Как расшифровать файли - Удаление вирусов
Здравствуйте! СТВ-Locker зашифровал файлы exel и word, которые находятся в основном на сетевом диске, добавив расширение .xzbotei....

Файли visual studio c++ - C++/CLI
я открываю картинку и нужно в том самом месте создать бинарный файл с тем же именем только с другим расширением. можно там где прописать...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.03.2012, 15:34
Ответ Создать тему
Опции темы

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