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

Назначение заголовочных файлов - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.78
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
15.07.2013, 19:03     Назначение заголовочных файлов #1
Я читала учебник и википедию - никак не доходит.

В общем, может я неправильно поняла: есть у меня "Моя программа.cpp", и есть "Заголовочный файл.hpp". В заголовочном файле прописаны прототипы функций, и классы без определения их методов, этот заголовочный файл включается в мою программу. Все определения содержатся, собственно, в моей программе.
Если это так, то я не понимаю, какой смысл выделять это в отдельный файл, если можно прописать то же самое в самом начале. Просто чтобы был отдельный список, и не надо было скакать вверх-вниз, если надо вспомнить какие параметры нужно передать в функцию?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2013, 19:03     Назначение заголовочных файлов
Посмотрите здесь:

C++ Подключение заголовочных файлов
Отличие заголовочных файлов C++
Подключение заголовочных файлов C++
C++ Объявление заголовочных файлов
Включение заголовочных файлов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
15.07.2013, 19:05     Назначение заголовочных файлов #2
Керра, если все определения разместить в заголовочном файле, затем его подключить в несколько cpp, то при сборке программы будет ошибка из-за множества определений функций. Объявлений может быть сколько угодно, определение - одно.
Kins
 Аватар для Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
15.07.2013, 19:06     Назначение заголовочных файлов #3
У заголовочного файла .h есть файл .срр, где даны определения всех методов, что содержатся в .h файле.
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
15.07.2013, 19:08  [ТС]     Назначение заголовочных файлов #4
0x10, если я правильно понимаю, то определение - это собственно тело функции, а объявление/прототип - это только ее название, с указанием типов параметров. И объявление содержится в .hpp, а определение - в основной программе. Так?

Добавлено через 48 секунд
Kins, тот .cpp, о котором вы говорите - это основная программа, или это еще что-то?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
15.07.2013, 19:10     Назначение заголовочных файлов #5
Цитата Сообщение от Керра Посмотреть сообщение
если я правильно понимаю, то определение - это собственно тело функции
Если прикапываться к формулировкам, то не тело само по себе, а заголовок+тело вместе.

Цитата Сообщение от Керра Посмотреть сообщение
И объявление содержится в .hpp, а определение - в основной программе. Так?
Угу.
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
15.07.2013, 19:13  [ТС]     Назначение заголовочных файлов #6
Цитата Сообщение от 0x10 Посмотреть сообщение
не тело само по себе, а заголовок+тело вместе
Ну я это и имела в виду

То есть получается, что это просто для того, чтобы было удобно смотреть, и все?
Kins
 Аватар для Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
15.07.2013, 19:13     Назначение заголовочных файлов #7
Цитата Сообщение от Керра Посмотреть сообщение
Kins, тот .cpp, о котором вы говорите - это основная программа, или это еще что-то?
нет, не основная- пример mscons.h - содержит объявления, mscons.cpp- содержит определения. Сама программа например prog.cpp включает в себя #include "mscons.h"
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
15.07.2013, 19:16     Назначение заголовочных файлов #8
Цитата Сообщение от Керра Посмотреть сообщение
То есть получается, что это просто для того, чтобы было удобно смотреть, и все?
Назначение вполне практическое: заголовочный файл предоставляет клиенту необходимые определения для использования в своем коде.
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
15.07.2013, 19:19  [ТС]     Назначение заголовочных файлов #9
Kins, так. вот у этих mscons различаются только расширения, то есть этот заголовочный файл "понимает", что тот .cpp относится к нему, и когда я его включаю в основную программу, включаются и те определения, которые находятся в mscons.cpp. Вроде наконец-то понятно))
Kins
 Аватар для Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
15.07.2013, 19:21     Назначение заголовочных файлов #10
Цитата Сообщение от Керра Посмотреть сообщение
Вроде наконец-то понятно))
в файле mscons.cpp тоже есть #include "mscons.h"
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
15.07.2013, 19:23     Назначение заголовочных файлов #11
Керра, так же раздельная компиляция. Каждый .cpp компилируется отдельно. Если запихать всё в хэдеры, то после препроцессирования получится один большой .cpp, и при любом изменении придётся перекомпилировать всё.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
15.07.2013, 19:23     Назначение заголовочных файлов #12
Цитата Сообщение от Керра Посмотреть сообщение
заголовочный файл "понимает", что тот .cpp относится к нему, и когда я его включаю в основную программу, включаются и те определения, которые находятся в mscons.cpp
Нет, все предельно тупо и просто.
Подключение заголовочного файла на уровне текста производит подстановку его содержимого. Далее *.cpp файлы компилируются по отдельности, на выходе получаются объектные файлы. Определения функций тут еще не нужны. И только потом когда объектные модули компонуются в окончательную сборку (пусть исполняемый файл) - происходит связывание и разрешение ссылок те же функции.
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
15.07.2013, 19:23  [ТС]     Назначение заголовочных файлов #13
Kins, ага. Ясненько, сейчас попробуем)
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
15.07.2013, 19:24     Назначение заголовочных файлов #14
Цитата Сообщение от gray_fox Посмотреть сообщение
то после препроцессирования получится один большой .cpp
Фиг с ним, с размером. Важнее проблема возникновения множества определений функций в разных объектных модулях.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
15.07.2013, 19:25     Назначение заголовочных файлов #15
Цитата Сообщение от 0x10 Посмотреть сообщение
Важнее проблема возникновения множества определений функций в разных объектных модулях.
Ну так объектный модуль то один будет)
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
15.07.2013, 19:27  [ТС]     Назначение заголовочных файлов #16
0x10, и что с этим множеством определений делать? Кстати, а что делает #pragma once?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
15.07.2013, 19:27     Назначение заголовочных файлов #17
Цитата Сообщение от gray_fox Посмотреть сообщение
Ну так объектный модуль то один будет)
А, прям настолько все в кучу спихать...

Цитата Сообщение от gray_fox Посмотреть сообщение
+ есть inline
Помним, но пока не принципиально.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
15.07.2013, 19:28     Назначение заголовочных файлов #18
Цитата Сообщение от Керра Посмотреть сообщение
то с этим множеством определений делать?
Не создавать множество определений, только одно.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
15.07.2013, 19:29     Назначение заголовочных файлов #19
Керра, определение должно быть одно. Иначе будет ошибка линковки.

pragma once предотвращает множественное включение одного файла.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2013, 19:31     Назначение заголовочных файлов
Еще ссылки по теме:

Подключение заголовочных файлов C++
Подключение заголовочных файлов C++
Иерархия заголовочных файлов C++

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

Или воспользуйтесь поиском по форуму:
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
15.07.2013, 19:31  [ТС]     Назначение заголовочных файлов #20
Спасибо большое
Yandex
Объявления
15.07.2013, 19:31     Назначение заголовочных файлов
Ответ Создать тему
Опции темы

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