Аватар для Taras_Z
102 / 86 / 5
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2

С++ .h файли

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

Студворк — интернет-сервис помощи студентам
Зачем нужны заголовочние файли?
Чем они отличаются от просто файлов?
И у меня есть большая програма
как ее можно разделить на 3 части
тоесть одни функции туда а одни туда и с третей все подключается.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.03.2012, 14:20
Ответы с готовыми решениями:

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

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

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

10
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
07.03.2012, 14:32
> Зачем нужны заголовочние файли?

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

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

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

Для чего нужен define?
Си, использование вложенных файлов *.c
0
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
07.03.2012, 14:33
Цитата Сообщение от Taras_Z Посмотреть сообщение
Зачем нужны заголовочние файли?
http://ru.wikipedia.org/wiki/%... 0%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
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
07.03.2012, 14:38
dimcoder, не пори чушь и не приучай человека заниматься неправильными вещами
0
 Аватар для Taras_Z
102 / 86 / 5
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
07.03.2012, 14:46  [ТС]
а как тогда правильно?
0
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
07.03.2012, 14:48
Evg, я всего лишь ответил на вопрос
Цитата Сообщение от Taras_Z Посмотреть сообщение
тоесть одни функции туда а одни туда и с третей все подключается.
пусть и не как Лев Толстой.
И какие по вашему
Цитата Сообщение от Evg Посмотреть сообщение
правильные вещи
?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
07.03.2012, 14:52
Цитата Сообщение от dimcoder Посмотреть сообщение
И какие по вашему
В посте #2 последняя ссылка

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

Твой вариант является самой распространённой ошибкой начинающих. Он, очевидным образом, не удовлетворяет пункту 2. Представь себя, если бы твоим способом было написано ядро линкса (несколько десятков мегабайт в исходнике). Тогда после каждого исправления нужно было бы несколько десятков минут заниматься перекомпиляцией (если вообще хватило бы памяти, чтобы такой объём компилировать за раз).
0
 Аватар для Taras_Z
102 / 86 / 5
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
07.03.2012, 14:59  [ТС]
вот я делаю из за пункта 1
пока меня 2 не интересует
спасибо
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
07.03.2012, 15:13
Цитата Сообщение от Taras_Z Посмотреть сообщение
вот я делаю из за пункта 1
Дело хозяйское. А потом начинаются вопросы из разряда (утрированно): "я фарфоровой кружкой забивал гвоздь и не могу понять, почему гвоздь не забился, а кружка разбилась"

Добавлено через 4 минуты
dimcoder, если взять твой способ, то, на твой взгляд, зачем в твоём примере нужны конструкции типа "#ifndef NAME_H"?
0
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
07.03.2012, 15:28
Цитата Сообщение от 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
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
07.03.2012, 15:34
Цитата Сообщение от dimcoder Посмотреть сообщение
И напишу в программе
А ты не пиши так в программе. Потому как два раза написать #include ничем не отличается от того, что ты два раза напишешь "int x;".

Цитата Сообщение от dimcoder Посмотреть сообщение
PS Это на мой взгляд
"#ifndef NAME_H" нужен именно при "нормальной" реализации. Когда код выделяют в отдельные модули, а в .h выделают интерфейсы модуля. В твоём случае ты просто разбил длинный текст на несколько коротких. Тут никакие ifndef'ы и не нужны. Хуже от них не будет, но реально не нужны
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.03.2012, 15:34
Помогаю со студенческими работами здесь

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

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

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

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

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


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

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

Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru