1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
|
|
1 | |
Назначение заголовочных файлов15.07.2013, 19:03. Показов 5537. Ответов 35
Метки нет (Все метки)
Я читала учебник и википедию - никак не доходит.
В общем, может я неправильно поняла: есть у меня "Моя программа.cpp", и есть "Заголовочный файл.hpp". В заголовочном файле прописаны прототипы функций, и классы без определения их методов, этот заголовочный файл включается в мою программу. Все определения содержатся, собственно, в моей программе. Если это так, то я не понимаю, какой смысл выделять это в отдельный файл, если можно прописать то же самое в самом начале. Просто чтобы был отдельный список, и не надо было скакать вверх-вниз, если надо вспомнить какие параметры нужно передать в функцию?
0
|
15.07.2013, 19:03 | |
Ответы с готовыми решениями:
35
Про добавление заголовочных файлов в заголовочных файлах Раздельная компиляция (нюансы использования заголовочных файлов и файлов реализации) Подключение заголовочных файлов и файлов реализации Подключение заголовочных файлов |
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
15.07.2013, 19:05 | 2 |
Керра, если все определения разместить в заголовочном файле, затем его подключить в несколько cpp, то при сборке программы будет ошибка из-за множества определений функций. Объявлений может быть сколько угодно, определение - одно.
0
|
59 / 58 / 7
Регистрация: 03.02.2013
Сообщений: 167
|
|
15.07.2013, 19:06 | 3 |
У заголовочного файла .h есть файл .срр, где даны определения всех методов, что содержатся в .h файле.
0
|
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
|
|
15.07.2013, 19:08 [ТС] | 4 |
0x10, если я правильно понимаю, то определение - это собственно тело функции, а объявление/прототип - это только ее название, с указанием типов параметров. И объявление содержится в .hpp, а определение - в основной программе. Так?
Добавлено через 48 секунд Kins, тот .cpp, о котором вы говорите - это основная программа, или это еще что-то?
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
15.07.2013, 19:10 | 5 |
Если прикапываться к формулировкам, то не тело само по себе, а заголовок+тело вместе.
Угу.
0
|
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
|
|
15.07.2013, 19:13 [ТС] | 6 |
Ну я это и имела в виду
То есть получается, что это просто для того, чтобы было удобно смотреть, и все?
0
|
59 / 58 / 7
Регистрация: 03.02.2013
Сообщений: 167
|
|
15.07.2013, 19:13 | 7 |
нет, не основная- пример mscons.h - содержит объявления, mscons.cpp- содержит определения. Сама программа например prog.cpp включает в себя #include "mscons.h"
1
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
15.07.2013, 19:16 | 8 |
Назначение вполне практическое: заголовочный файл предоставляет клиенту необходимые определения для использования в своем коде.
0
|
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
|
|
15.07.2013, 19:19 [ТС] | 9 |
Kins, так. вот у этих mscons различаются только расширения, то есть этот заголовочный файл "понимает", что тот .cpp относится к нему, и когда я его включаю в основную программу, включаются и те определения, которые находятся в mscons.cpp. Вроде наконец-то понятно))
0
|
59 / 58 / 7
Регистрация: 03.02.2013
Сообщений: 167
|
|
15.07.2013, 19:21 | 10 |
1
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
|
15.07.2013, 19:23 | 11 |
Керра, так же раздельная компиляция. Каждый .cpp компилируется отдельно. Если запихать всё в хэдеры, то после препроцессирования получится один большой .cpp, и при любом изменении придётся перекомпилировать всё.
1
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
15.07.2013, 19:23 | 12 |
Нет, все предельно тупо и просто.
Подключение заголовочного файла на уровне текста производит подстановку его содержимого. Далее *.cpp файлы компилируются по отдельности, на выходе получаются объектные файлы. Определения функций тут еще не нужны. И только потом когда объектные модули компонуются в окончательную сборку (пусть исполняемый файл) - происходит связывание и разрешение ссылок те же функции.
2
|
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
|
|
15.07.2013, 19:23 [ТС] | 13 |
Kins, ага. Ясненько, сейчас попробуем)
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
15.07.2013, 19:24 | 14 |
Фиг с ним, с размером. Важнее проблема возникновения множества определений функций в разных объектных модулях.
0
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
|
15.07.2013, 19:25 | 15 |
0
|
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
|
|
15.07.2013, 19:27 [ТС] | 16 |
0x10, и что с этим множеством определений делать? Кстати, а что делает #pragma once?
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
15.07.2013, 19:27 | 17 |
А, прям настолько все в кучу спихать...
Помним, но пока не принципиально.
0
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
|
15.07.2013, 19:28 | 18 |
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
15.07.2013, 19:29 | 19 |
Керра, определение должно быть одно. Иначе будет ошибка линковки.
pragma once предотвращает множественное включение одного файла.
1
|
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
|
|
15.07.2013, 19:31 [ТС] | 20 |
Спасибо большое
0
|
15.07.2013, 19:31 | |
15.07.2013, 19:31 | |
Помогаю со студенческими работами здесь
20
Подключение заголовочных файлов Подключение заголовочных файлов Подключение заголовочных файлов Отличие заголовочных файлов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |