Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 65, средняя оценка - 4.88
Evg
Эксперт CАвтор FAQ
18909 / 6868 / 503
Регистрация: 30.03.2009
Сообщений: 19,338
Записей в блоге: 30
#1

Процесс компиляции - C++

18.06.2012, 10:32. Просмотров 10544. Ответов 19
Метки нет (Все метки)

Вопрос из лички перетащу на форум, т.к. другим, возможно, тоже будет интересно

Когда препроцессор вставляет включаемый хедерами код в исполнительный файл и компилятор транслирует код в объектный, как происходит линк функций (хедеры включает только заголовки функций), используемых из включенных хедеров?
Когда компилируется код используемых функций и как формируются ссылки?
1. Препроцессор ничего в "исполнительный" файл не вставляет. Препроцессор делает только текстовую подстановку и всё. Т.е. из 10 текстовых файлов делает один. И больше ничего
2. В любом случае я может неправильно понимаю, что означает "исполнительный"
3. Если под "линком" подразумевается линковка при помощи линкера (в русских книгах обычно это называют "связывание" и "редактор связей"), то препроцессор к этому отношения не имеет. Весь код функций находится в библиотеках. В языках Си и Си++ любая библиотека предоставляется в виде файла с бинарным кодом и набором инклюдов. Автор библиотеки должен гарантировать, что инклюды соответствуют бинарному файлу. Т.е. когда ты вызываешь printf, то в файле stdio.h есть только описание прототипа и больше ничего. Сам код функции printf находится в библиотеке в уже скомпилированном виде, а эта библиотека поставляется в комплекте вместе с компилятором. Компилятор по умолчанию линкуется с библиотекой, пользователю дополнительных действий делать не надо.
4. Что такое "ссылки" не понял

В среднем при плохой терминологии и кривой постановке вопроса я примерно понимаю, чего человек хочет узнать. Если получится придумать, каким образом аккуратно и понятно изложить мысли, то попробую отписаться попозже
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2012, 10:32
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Процесс компиляции (C++):

Волновой процесс - C++
Помогите найти исходник алгоритма (волновой процесс) для нахождения минимального маршрута в графе

Процесс не закрывается - C++
Проблема на 82ой строчке, второй параметр функции GetMessage(). Так как у меня создается одно окно второй параметр пишу 0. Но если будет...

Проверка на запущен ли Процесс С++ - C++
Добрый день, нужно как то проверять запущен ли процесс, если не запущен, ничего не выводить, а если запущен вывести к примеру "Запущен"...

Процесс обучения нейросети - C++
Добрый день. Подскажите, пожалуйста, я хочу написать нейросеть на С++. Это возможно без подключения MATLAB на чистом С++? Дело в том, что...

Ошибка компиляции - C++
Дана задача с использованием friend-ов. Не могу понять почему программа не видит (Square s(5, 4);) Помогите пожалуйста чайнику) ...

Автоматизировать процесс заполнения документа в Word - C++
Доброго времени суток уважаемые форумчане! Возникла идея, создать программу по работе с бланками в MS Office для облегчения себе жизни. В...

19
silent_1991
Эксперт С++
5006 / 3064 / 149
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
26.06.2012, 12:43 #16
Цитата Сообщение от alexsvk Посмотреть сообщение
Необходимость реализации чистых виртуальных функций (ЧВФ) есть из-за возможности ошибки при обращении к нереализованной ЧВФ через указатель таблицы виртуальных функций?
Чистые виртуальные (и просто виртуальные) функции никакого отношения к компиляции (о чём, собственно, и тема) не имеют, всё это вариант реализации динамического полиморфизма и правила "объект класса потомка одновременно является и объектом класса-предка". И странно, что вам не ясен смысл реализации чистых виртуальных функций. А как вы хотели иначе, как вы вызовете функцию без реализации?
0
Kastaneda
28.06.2012, 17:12
  #17

Не по теме:

На днях сдал сессию, был у нас такой предмет "Теория языков программирования и методы трансляции". Хочу поделиться ссылкой http://ermak.cs.nstu.ru/trans/ Для тех, кому лень читать большие толстые книги, там можно почитать об этапах трансляции. Информация в сжатом виде, но общий смысл понятен.
P.S. там много опечаток и неточностей, кто будет читать - будте внимательными.

9
mkostoevr
Незнайка
25 / 10 / 1
Регистрация: 14.10.2016
Сообщений: 370
Записей в блоге: 2
06.12.2017, 20:38 #18
Evg, можно маленький вопрос?

А каким образом осуществляется передача ассемблерного листинга транслятору (as)? Сохранением файла листинга и передачи транслятору в качестве аргумента пути к нему?
0
Evg
Эксперт CАвтор FAQ
18909 / 6868 / 503
Регистрация: 30.03.2009
Сообщений: 19,338
Записей в блоге: 30
06.12.2017, 23:49  [ТС] #19
Да, через файл. Если есть компилятор gcc, то подай в процессе компиляции опцию -v. Он покажет, что в каком порядке запускает, там наглядно видно, что передача данных между программами идёт через файлы в tmp-каталоге

Код
$ gcc t.c -v
...
 /usr/lib/gcc/i686-pc-cygwin/4.8.3/cc1.exe ... t.c ... -o /tmp/ccUK1onK.s  <--- это запуск транслятора с языка Си в ассемблер
...
 /usr/i686-pc-cygwin/bin/as.exe ... /tmp/ccUK1onK.s ... -o /tmp/ccAqZw4F.o   <--- это запуск ассемблятора, который формирует объектный файл
...
 /usr/lib/gcc/i686-pc-cygwin/4.8.3/collect2.exe ... /tmp/ccAqZw4F.o ... -o a.exe   <--- это запуск линкера
1
mkostoevr
Незнайка
25 / 10 / 1
Регистрация: 14.10.2016
Сообщений: 370
Записей в блоге: 2
07.12.2017, 06:46 #20
Evg, понял, благодарю
0
07.12.2017, 06:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2017, 06:46
Привет! Вот еще темы с ответами:

Ошибка компиляции ассемблерной вставки - C++
Добрый вечер. Захотелось мне сделать ассемблерную вставку в C++ код. Сделал. Но компилятору MinGW чето не нравится. Выдает следующие ошибки...

Ошибка сегментирования при компиляции - C++
Когда компилирую через g++ компилируется, при запуске выдает ошибку сегментирования, а при компиляции через NetBeans IDE выдает две ошибки,...

Как программно определить процесс запущенный в системе - C++
Собственно, я хочу что бы программа определяла запущен ли конкретный процесс в системе. Подскажите пожалуйста как это сделать.

Быстрое чтение большого файла. Зависает процесс - C++
Всем доброго времени суток. Есть задача прочитать файл(1-20 мб), который состоит из слов разделённых пробелами для того, чтобы переписать...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru