@sddvxd

Зачем нужны прототипы в C++?

Добрый день. Начал учить C++ после PHP и возникли некоторое вопросы:

1)Заголовочные файлы: в них собраны прототипы функций библиотек?(и все?)
2)Как компилятор находит нужные встроенные функции по прототипам если мы не включаем в cpp файл библиотеки а лишь подключаем заголовочный файл с помощью #include?
3)Я так понимаю прототипы в C++ нужны для того чтобы компилилось быстрее?
4)Заголовочные файлы представляют из себя уже откомпиленый код?(объектный)
5)Тот же вопрос что и в 4 только уже про библиотеки

Не спрашивайте зачем мне это надо знать просто буду крепче спать

Учу по книге, довольно хорошей (Стивен Прата) так что пожалуйста не отправляйте меня курить мануалы или идти дальше кодить на php и html, в этой книге нет ответов на мои вопросы
  • Вопрос задан
  • 1072 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
1)Заголовочные файлы: в них собраны прототипы функций библиотек?(и все?)

Содержимое заголовочного файла просто подставляется в то место где написано #include. Поэтому туда можно поместить всё что угодно. Традиционно библиотеки помещают туда объявления классов, функций и глобальных переменных и определения макросов.

2)Как компилятор находит нужные встроенные функции по прототипам если мы не включаем в cpp файл библиотеки а лишь подключаем заголовочный файл с помощью #include?

Компилятор их не находит. Не его это работа. Он просто помещает в объектный код вызовы ссылающиеся на внешние символы. Во время линковки объектных файлов в исполняемый файл линковщик находит все вызванные функции в библиотеках которые ему передали для линковки.

3)Я так понимаю прототипы в C++ нужны для того чтобы компилилось быстрее?

Прототипы нужны чтобы компилировалось вообще. Нельзя вызвать функцию о которой неизвестно вообще ничего.

4)Заголовочные файлы представляют из себя уже откомпиленый код?(объектный)

Нет, это обыкновенные текстовые файлы с исходным кодом. Содержимое заголовочного файла просто подставляется в то место где написано #include. Открой один для интереса и почитай.

5)Тот же вопрос что и в 4 только уже про библиотеки

Да. Статическая библиотека -- это архив объектных файлов. Динамическая библиотека -- это собранные линковщиком вместе объектные файлы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
1) В заголовочном файле могут быть объявлены типы данных, прототипы функций, само тело функции, шаблоны. Всё это может быть объявлено и в cpp.
2) Этим занимается линкер.
3) Это одна из причин. Вторая - разрешение проблем видимости.
Например попробуйте написать без прототипов взаимно рекурсивные функции.
4) Нет
5) Нет
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы