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

Архитектура компоновки - C++

Восстановить пароль Регистрация
 
dimansf
0 / 0 / 0
Регистрация: 04.08.2015
Сообщений: 6
29.07.2016, 20:24     Архитектура компоновки #1
Научился кодить(более менее), но все таки остались пробелы в понимании. Искал в гугле данные темы, но во всех очень поверхностно и шаблонно.
Я хотел бы узнать у знающих людей как устроена связь между заголовочником(.h) и файлом исполняемым (.сpp), на конкретном примере.
C++
1
2
3
4
5
6
7
8
//sum.h
int sum (int, int);
 
//sum.cpp
#include "sum.h"
int sum(int a,int b) {
 return a+b;
}
Допустим я имею два файла, как они связаны если я подключу sum.h в main.cpp.
C++
1
2
3
4
#include sum.h
int main () {
return sum(5,6);
}
Вопросы:
1) Как заголовочник находит срр файл ?
2) Что будет если два файла срр с одинаковыми реализациями (с одинаковыми сигнатурами функций) будут подключать один и тот же заголовочник т.е.
C++
1
2
3
4
5
//newSum.cpp
#include sum.h
int sum(int a, int b) {
return a+a+b;
}
3)Если я перенесу файлы sum.срр и sum.h в любую другую директорию и подключу в main(которая находится в новой директории) то будет работать?
4) .lib(.dll) - это cpp+h ?
5)Почему в windows kits отсутствуют такие файлы, как stdio.cpp? Где тогда находится реализация одноименного заголочника?
6) Посоветуйте книгу, где можно найти вопросы на подобного рода ответы, и как еще можно поизвращаться с заголовочником + исполняемым файлом.
Извиняюсь за косяки с терминами, опыта не очень много. чуть больше года.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2016, 20:24     Архитектура компоновки
Посмотрите здесь:

Как изменить порядок компоновки в Visual C++? C++
C++ Visual Studio. Добавление заголовки другого проекта (ошибка компоновки)
C++ архитектура ЭВМ на С++
Ошибка компоновки "LNK1169: обнаружен многократно определенный символ" C++
C++ Ошибка компоновки fatal error LNK1104: не удается открыть файл "kernel32.lib"
Объекты и архитектура C++
ОС и архитектура ЭВМ C++
C++ Напишите команды компиляции и компоновки для Visual Studio

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HelicopterK52
634 / 177 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
29.07.2016, 20:37     Архитектура компоновки #2
Цитата Сообщение от dimansf Посмотреть сообщение
как устроена связь между заголовочником(.h) и файлом исполняемым (.сpp), на конкретном примере.
Вообще никак. Это разные файлы. Если Вы включаете заголовок, то его содержимое попадает в .cpp.

Цитата Сообщение от dimansf Посмотреть сообщение
Как заголовочник находит срр файл ?
В смысле?
Файлы будут отданы препроцессору, который, встретив include, добавит содержимое указанного файла, т.е.
после препроцессора .cpp станут такими (комменты в расчет не берем, они для ясности):
C++
1
2
3
4
5
6
7
8
9
//sum.cpp
//#include "sum.h"
//вместо инклуда подставится содержимое файла
 
int sum (int, int);
 
int sum(int a,int b) {
 return a+b;
}
C++
1
2
3
4
5
6
7
8
//main.cpp
//#include sum.h
//сюда также подставится содержимое файла sum.h
 
int sum (int, int);
int main () {
   return sum(5,6);
}
затем каждая из этих единиц трансляции будет скомпилирована в отдельные объектные файлы, те в свою очередь попадут на вход линкеру (компоновщику), и он уже найдет что и где определено.
Цитата Сообщение от dimansf Посмотреть сообщение
Что будет если два файла срр с одинаковыми реализациями (с одинаковыми сигнатурами функций) будут подключать один и тот же заголовочник т.е.
Если Вы их оба скормите линкеру, то он выдаст ошибку о множественном определении символа.
Цитата Сообщение от dimansf Посмотреть сообщение
Если я перенесу файлы sum.срр и sum.h в любую другую директорию и подключу в main(которая находится в новой директории) то будет работать?
Не понятно что и как, но ежели пути все правильные, то будет.
Цитата Сообщение от dimansf Посмотреть сообщение
4) .lib(.dll) - это cpp+h ?
Нет. Есть статические и динамические библиотеки. Думаю, сами нагуглите, т.к. писать здесь целую лекцию врядли нужно.
Цитата Сообщение от dimansf Посмотреть сообщение
Где тогда находится реализация одноименного заголочника?
Ну Вам же предоставляются библиотеки с их реализациями.
Цитата Сообщение от dimansf Посмотреть сообщение
и как еще можно поизвращаться с заголовочником + исполняемым файлом.
Для начала, попробуйте собрать статическую библиотеку, а затем подцепить её к своему "проекту".
Узнаете немного новой информации.
Вообще Вам нужно погуглить на тему "Раздельная компиляция".

Добавлено через 2 минуты
Вот, правда для Linux и C, но смысл и принципы везде одинаковые: http://www.opennet.ru/docs/RUS/zlp/
Вам нужны первые три главы.
Yandex
Объявления
29.07.2016, 20:37     Архитектура компоновки
Ответ Создать тему
Опции темы

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