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

Как на физическом уровне работает компоновщик в приведенном случае - C++

Восстановить пароль Регистрация
 
BESSON_off
 Аватар для BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 329
13.08.2014, 10:13     Как на физическом уровне работает компоновщик в приведенном случае #1
Всем привет!
Уважаемые форумчане объясните мне, как, на физическом уровне, работает компоновщик в этом случае:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//файл Class.h
class Test {
public:
    Test();
    ~Test();
};
 
//файл Class.cpp
Test::Test() {cerr << "Test::Test()\n";}
Test::~Test() {cerr << "Test::~Test()\n";}
 
Test object;
 
//файл main.cpp
#include "Class.h
 
int main() {
cerr << "In main\n";
}
 
//Вывод:
Test::Test()
In main
Test::~Test()
Каким образом создается файл? Я ведь включаю в main.cpp файл Class.h?
По каким правилам это происходит?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2014, 10:13     Как на физическом уровне работает компоновщик в приведенном случае
Посмотрите здесь:

[C++]Теория.Почему в данном случае copy() не работает после reserve(),но работает после resize()? C++
C++ Как влияет inline и обертка(#ifndef #define #endif) .h файла на компоновщик.
C++ Не работает сортировка в приведенном коде
Компоновщик о ликовка программы это одно и тоже? C++
C++ Как работает функция "test" в приведенном коде
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
13.08.2014, 10:21     Как на физическом уровне работает компоновщик в приведенном случае #2
Цитата Сообщение от BESSON_off Посмотреть сообщение
Каким образом создается файл?
Какой файл?
Цитата Сообщение от BESSON_off Посмотреть сообщение
Я ведь включаю в main.cpp файл Class.h?
Да. А в чем конкретно тут вопрос?
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,165
Завершенные тесты: 1
13.08.2014, 10:41     Как на физическом уровне работает компоновщик в приведенном случае #3
#include просто включает текст h файла в компилируемый файл.
Вопрос, думаю, не о компоновке, а о последовательности исполнения.
В данном случае порядок такой:

1. Создание глобального объекта object
2. Выполнение кода функции main
3. Удаление глобального объекта object

Кстати, чтобы увидеть переменную object в main, нужно добавить в h файл ее объявление
C++
1
extern Test object;
BESSON_off
 Аватар для BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 329
13.08.2014, 13:42  [ТС]     Как на физическом уровне работает компоновщик в приведенном случае #4
Разобрался.
Вопрос бы в том, каким образом определяются в программе разные единицы трансляции.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,165
Завершенные тесты: 1
13.08.2014, 15:02     Как на физическом уровне работает компоновщик в приведенном случае #5
каждый подключенный к проекту cpp файл является отдельной единицей трансляции.
Когда они все откомпилированы, то компоновщик выполняет сборку начиная с int main()
Yandex
Объявления
13.08.2014, 15:02     Как на физическом уровне работает компоновщик в приведенном случае
Ответ Создать тему
Опции темы

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