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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
Taras_Z
 Аватар для Taras_Z
100 / 84 / 2
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
07.03.2012, 14:20     С++ .h файли #1
Зачем нужны заголовочние файли?
Чем они отличаются от просто файлов?
И у меня есть большая програма
как ее можно разделить на 3 части
тоесть одни функции туда а одни туда и с третей все подключается.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2012, 14:20     С++ .h файли
Посмотрите здесь:

Текстовие файли Pascal
Файли.Гистограмма Turbo Pascal
Turbo Pascal Файли{text}
Файли Lisp Lisp
Файли Lisp Lisp
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16843 / 5264 / 323
Регистрация: 30.03.2009
Сообщений: 14,159
Записей в блоге: 26
07.03.2012, 14:32     С++ .h файли #2
> Зачем нужны заголовочние файли?

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

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

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

Для чего нужен define?
Си, использование вложенных файлов *.c
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
07.03.2012, 14:33     С++ .h файли #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, извиняюсь, пока писал, уже ответили.

Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16843 / 5264 / 323
Регистрация: 30.03.2009
Сообщений: 14,159
Записей в блоге: 26
07.03.2012, 14:38     С++ .h файли #4
dimcoder, не пори чушь и не приучай человека заниматься неправильными вещами
Taras_Z
 Аватар для Taras_Z
100 / 84 / 2
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
07.03.2012, 14:46  [ТС]     С++ .h файли #5
а как тогда правильно?
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
07.03.2012, 14:48     С++ .h файли #6
Evg, я всего лишь ответил на вопрос
Цитата Сообщение от Taras_Z Посмотреть сообщение
тоесть одни функции туда а одни туда и с третей все подключается.
пусть и не как Лев Толстой.
И какие по вашему
Цитата Сообщение от Evg Посмотреть сообщение
правильные вещи
?
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16843 / 5264 / 323
Регистрация: 30.03.2009
Сообщений: 14,159
Записей в блоге: 26
07.03.2012, 14:52     С++ .h файли #7
Цитата Сообщение от dimcoder Посмотреть сообщение
И какие по вашему
В посте #2 последняя ссылка

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

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

Добавлено через 4 минуты
dimcoder, если взять твой способ, то, на твой взгляд, зачем в твоём примере нужны конструкции типа "#ifndef NAME_H"?
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
07.03.2012, 15:28     С++ .h файли #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 Это на мой взгляд
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2012, 15:34     С++ .h файли
Еще ссылки по теме:

Файли Lisp Lisp
Pascal Файли

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16843 / 5264 / 323
Регистрация: 30.03.2009
Сообщений: 14,159
Записей в блоге: 26
07.03.2012, 15:34     С++ .h файли #11
Цитата Сообщение от dimcoder Посмотреть сообщение
И напишу в программе
А ты не пиши так в программе. Потому как два раза написать #include ничем не отличается от того, что ты два раза напишешь "int x;".

Цитата Сообщение от dimcoder Посмотреть сообщение
PS Это на мой взгляд
"#ifndef NAME_H" нужен именно при "нормальной" реализации. Когда код выделяют в отдельные модули, а в .h выделают интерфейсы модуля. В твоём случае ты просто разбил длинный текст на несколько коротких. Тут никакие ifndef'ы и не нужны. Хуже от них не будет, но реально не нужны
Yandex
Объявления
07.03.2012, 15:34     С++ .h файли
Ответ Создать тему
Опции темы

Текущее время: 09:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru