С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 9 / 0
Регистрация: 19.03.2020
Сообщений: 68

Что конкретно подставляется из библиотек в исходник при работе препроцессора?

07.04.2020, 15:31. Показов 1111. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сап, плюсач, я так и не понял, когда файл компилируется, что конкретно подставляется из библиотек в исходник при работе препроцессора? И чем отличаются include вида "???.h" и <???>. (Я знаю, что последние есть только в плюсах, а первые еще в чистом Це, мне интересно, отличаются ли они чем-нибудь).
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.04.2020, 15:31
Ответы с готовыми решениями:

При работе от сети Windows XP работает нормально, а от батареи зависает конкретно и надолго
что происходит с ноутом(asus)? при работе от сети Windows xp работает нормально, а от батареи зависает конкретно и надолго, ее...

Вопрос по работе препроцессора
Здраствуйте! У меня тут недопонимание работы препроцесса. Определена констранта. #define HMC5843_USE_WORK_QUEUES 1 и есть...

Что конкретно означает оператор . (точка) при вызове каких либо функций?
Например, функция s.size() вычисляет длину строки s. Так есть где-нибудь определение этой точки? В Википедии написано &quot;Обращение к...

9
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
07.04.2020, 16:09
Цитата Сообщение от Hideri Kanzaki Посмотреть сообщение
Я знаю, что последние есть только в плюсах, а первые еще в чистом Це, мне интересно, отличаются ли они чем-нибудь
Препроцессор не обращает внимания на расширения файлов. Можете сделать файл хоть "Hideri.Kanzaki" и включать его #include "Hideri.Kanzaki".

Цитата Сообщение от Hideri Kanzaki Посмотреть сообщение
что конкретно подставляется из библиотек включаемых файлов в исходник при работе препроцессора?
Всё содержимое указанного файла, вместе с раскрытыми макросами.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
07.04.2020, 16:23
Цитата Сообщение от Hideri Kanzaki Посмотреть сообщение
что конкретно подставляется из библиотек в исходник при работе препроцессора?
если под "библиотекой" подразумевается lib или dll, тогда ничего не подставляется.

библиотека - это уже скомпилированный код.
препроцессор работает задолго до компиляции.

Цитата Сообщение от Hideri Kanzaki Посмотреть сообщение
И чем отличаются include вида "???.h" и <???>.
"???.h" - предполагается, что заголовок лежит рядышком.
поиск организуется по принципу: сначала смотрим рядышком, если не нашлось - ищем по системным путям

<???.h> - предполагается, что заголовок лежит где то по системным путям.
поиск организуется по принципу: сначала смотрим по системным путям, если не нашлось - ищем рядышком

<???> - предполагается, что это - стандартный заголовок.
без разницы где он лежит (в системных папках среды)
1
0 / 9 / 0
Регистрация: 19.03.2020
Сообщений: 68
15.04.2020, 03:25  [ТС]
Цитата Сообщение от hoggy Посмотреть сообщение
если под "библиотекой" подразумевается lib или dll
А чем либа от дллки отличается? Насколько я помню, вроде тем, что либу использует только одна программа, а длл может "распиливаться" несколькими, так? И как-то не припомню программ с "внешними" либами, только длл, то бишь либа встраивается в экзэшник?

Добавлено через 3 минуты
Я изначально подразумевал вообще все "внешние" файлы с кодом вроде бородавочников заголовочников, библиотек в.т.ч. общих аля ДЛЛ, и как они все соотносятся.

Если правильно понимаю, все заголовочники встраиваются на препроцессинге, либы объединяются с ехешником при компоновке, дллки вынесены вовне, все верно?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.04.2020, 11:47
Цитата Сообщение от Hideri Kanzaki Посмотреть сообщение
А чем либа от дллки отличается?
.dll - dynamic link library.
динамически линкуемая библиотека.

в терминологии майкрософт, это - самая что ни на есть настоящая библиотека.
она представляет собой уже скомпилированный и слинкованный,
тобишь полностью готовый к работе, законченный бинарник.

.lib - библиотека в терминах только компиляторов/линкеров с++
lib не является законченным бинарником, как dll.
по сути, lib - это на самом деле тупо архив из .obj

при сборке exe (или dll) линкер будет извлекать из .lib объектники (.obj)
и ему ещё только предстоит слинковать их в нечто единое и законченное целое.

так же, на языке с++ существует такое обывательское обозначение "header-only" библиотек.
под "хедер-онли" подразумевается выделенный в отдельный файл-заголовок (или в файлы)
многоразовый библиотечный код.

и хотя формально, заголовки - это заголовки, а не библиотеки,
тем не менее библиотечный код называют библиотечным.
поэтому такие заголовки так же часто называют просто "библиотеками".

в результате всего этого зоопарка из терминов и слэнга,
когда при общении слышишь слово "библиотека",
нужно по контексту догадываться, что именно скрывается под этим словом.

Цитата Сообщение от Hideri Kanzaki Посмотреть сообщение
Если правильно понимаю, все заголовочники встраиваются на препроцессинге, либы объединяются с ехешником при компоновке, дллки вынесены вовне, все верно?
ага.

если у тебя проект - executable,
тогда либы объединяются с экзешником при компоновке.

если у тебя проект - dll
тогда либы объединяются с dll при компоновке.

вообще dll и exe - это итоговые продукты сборочного конвейера
между ними много общего.

и то, и другое содержит уже готовый к работе исполняемый бинарный код.

экзешник можно просто так взять и запустить на выполнение.

dll напрямую запустить нельзя (отсутствуют необходимые для этого запчасти)
но можно запустить опосредованно: через другой exe (подключив к нему динамически),
либо через так называемые "суррогатные процессы" - это экзешники, которые специально были разработаны,
что бы подгружать и запускать различные dll.

так например, в мире Windows в dll любят поселять на местожительство так называемые COM-объекты.
для того что бы COM-объект начал жить/функционировать, очевидно, нужно загрузить его dll.
dll не простая. она соответствуют особому стандарту dll для COM-объектов.
далее можно скормить такую dll суррогатному процессу, он её запустит,
и в системе станет ещё на один COM объект больше.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
15.04.2020, 12:35
hoggy, а как вызвыть функцию из lib файла в рантайме
По аналогии c LoadLibrary("dll")+GetProcAddress
Подскажите, очень нужно.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.04.2020, 13:27
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а как вызвыть функцию из lib файла в рантайме
По аналогии c LoadLibrary("dll")+GetProcAddress
никак.

ближайшая аналогия:
C++
1
#pragma comment (lib, "library.lib")
но это - статическая линковка.
нужна динамическая линковка - делай dll
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
15.04.2020, 14:26
hoggy, Я специально уточнил,, что в рантайме, чтоб можно было хоть прямо в окне программы написать название библиотеки и она выполнилась.
0
0 / 9 / 0
Регистрация: 19.03.2020
Сообщений: 68
16.04.2020, 00:00  [ТС]
Цитата Сообщение от hoggy Посмотреть сообщение
тогда либы объединяются с dll при компоновке
Ага, то бишь длл тоже из либ собирается? Ясно все тогда. Кстати, а в юних/линух-подобных системах как? Насколько помню, там эльф вместо экзешника, а вместо дллов со. Т.е. в линухоидах из тех же либ и исходников компонуются эльф и со?
0
2622 / 1633 / 266
Регистрация: 19.02.2010
Сообщений: 4,338
16.04.2020, 12:07
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Я специально уточнил,, что в рантайме, чтоб можно было хоть прямо в окне программы написать название библиотеки и она выполнилась.
Никак. Ибо для этого нужно, фактически, повторить часть работы линкера или системного загрузчика - выставить некоторый набор перемещаемых ссылок.
Тем более, что нужная фукция из либы может вызывать какие-то другие из той же либы (или не только из неё), т.е. надо уметь двигаться по цепочке вызовов/зависимостей.
Поэтому вместо явных значений адресов в коде объектника/либы стоят некоторые "индексы". Их реальными адресами будет заменять линкер при статической компоновке (а загрузчик ОСи сделает то же самое для вызываемых из dllок функций при загрузке этих дллок в адресное пространство процесса=екзешника).
Т.е. потенциальная возможность всё-таки есть - но геморная.
А добавочный гемор будет из-за необходимости борьбы с ОСью (ибо надо иметь/получить права, чтобы сегмент данных, куда загружена либа или функция из неё, обозвать сегментом кода, либо чтобы перезаписывать содержимое сегмента кода, который дефолтно ридонли) и, м.б., с антивирями (которые тоже могут следить, чтобы прога не начинала исполнять данные и/или не самомодифицировалась).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.04.2020, 12:07
Помогаю со студенческими работами здесь

Как лучше копировать память, обмениваться указателями и т.д. при работе с кучей динамических библиотек (DLL) ?
Привет! Вот есть много DLL-к, каждая работает со своей внутренней динамической памятью, а так же есть необходимость работать с объектами...

Есть готовый проект на asp.net 2.0 .net 4.5, ошибки при работе с одной из библиотек, нужна консультация
Всем добрый день, Столкнулся с такой ситуацией: есть готовый проект на asp.net 2.0 .net 4.5, есть ошибки при работе с одной из библиотек,...

За что браться в изучении? Что конкретно надо знать из математик высшей школы?
Добрый вечер! Скажите, какие разделы каких математик нужно знать для четкого понимания дисциплины численные методы? Я лекции начал...

Исходник по работе с сетью
Доброго времени суток, друзья! Ищу исходники по работе с сетью (передача файлов и сообщений) между клиентом и сервером-приложением....

При включении и перезагрузке подставляется несуществующий floppy дисковод
Надеюсь, что я попал в правильный раздел, но буду не против, если модератор переправит эту мою тему в другой раздел. Проблема: Наверное,...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru