Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915

Включение библиотек в main.cpp и my_func.cpp

13.03.2020, 13:32. Показов 4678. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,

Подскажите пожалуйста, ни как не могу понять, вот если:

C++
1
2
3
4
5
6
7
8
9
//main.cpp
#include <iostream>
 
int main()
{
cout<<main<<endl;
 
my_func();
}
C++
1
2
3
4
5
6
7
//my_func.cpp
#include <iostream>
 
void my_func()
{
cout<<my_func<<endl;
}
То есть для того, чтобы функция my_func скомпилировалась, нужно включить в нее библиотеку isotream, и вот вопрос: в итоге в самом exe файле самой этой библиотеки isotream - будет как бы два экземпляра ? Или компилятор умный и все повторы уберет и текст библиотеки iostream - будет только один ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.03.2020, 13:32
Ответы с готовыми решениями:

Main.cpp: In function ‘int main()’: main.cpp:10:1: error: ‘then’ was not declared in this scope
Написал программу и выдает ошибку. #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() {double a, b, x; ...

Есть три файла. файл main.cpp и Source.cpp знают только Header.h, так как он подключен. как же подключается Source.cpp
main.cpp #include &lt;iostream&gt; #include&quot;Header.h&quot; using namespace std; int main() { A ob; ob.f(); return...

Main.cpp In file included from main.cpp
//class.cpp #include &quot;class.h&quot; Ticket::Ticket() { prise = 0; marshrut = &quot;none&quot;; time = &quot;none&quot;; ...

7
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
13.03.2020, 13:43
Optimus11, начать с того, что "текста библиотеки" в exe нет никакого: ни лишнего, ни нелишнего.

Цитата Сообщение от Optimus11 Посмотреть сообщение
библиотеки isotream - будет как бы два экземпляра ?
Нет, не будет.
У вас пропущен базовый пласт знаний, из-за этого у вас такие абсурдные суждения.
Вот: https://www.youtube.com/watch?v=G_jcBrrYPAs
1
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
13.03.2020, 13:43
Цитата Сообщение от Optimus11 Посмотреть сообщение
То есть для того, чтобы функция my_func скомпилировалась, нужно включить в нее библиотеку isotream, и вот вопрос: в итоге в самом exe файле самой этой библиотеки isotream - будет как бы два экземпляра ? Или компилятор умный и все повторы уберет и текст библиотеки iostream - будет только один ?
Это не библиотека, это заголовочный файл.
В любом случае, все функции, которые не-inline будут только по одному разу.
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
13.03.2020, 16:13  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Optimus11
У вас пропущен базовый пласт знаний, из-за этого у вас такие абсурдные суждения.
Вот: https://www.youtube.com/watch?v=G_jcBrrYPAs
А вообще эти знания в каких случаях применяется ? Или как часто ?
Я просто даже не могу представить в каких случаях.
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
13.03.2020, 16:16
Optimus11, всегда.

Добавлено через 35 секунд
Если вы не применяете, значит фактически пишете программу наугад.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,217
13.03.2020, 17:37
Цитата Сообщение от Optimus11 Посмотреть сообщение
есть для того, чтобы функция my_func скомпилировалась, нужно включить в нее библиотеку isotream,
Не существует никакой "библиотеки isotream". <iostream> - это заголовочный файл, а не библиотека. Почему вы называете его "библиотекой"?

<iostream> - это заголовочный файл стандартной библиотеки языка С++. Стандартная библиотеки языка С++ всегда линкуется к вашей программе ("включается" в вашу программу). И линкуется один раз. Ваше #include <iostream> не имеет к этому никакого отношения.

Забудьте эту странную "пионэрскую" манеру назвать включение заголовочных файлов "включением библиотек" и подобные вопросы отпадут сами собой.
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
13.03.2020, 18:26  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Не существует никакой "библиотеки isotream". <iostream> - это заголовочный файл, а не библиотека. Почему вы называете его "библиотекой"?
.
Под библиотекой я имел ввиду, как бы ту часть, которая как бы уже готовая есть в бинарном виде.

Позвольте я тогда по другому задам вопрос: предположим я в VS сделал две функции:

-my_func-1.h
-my_func-1.cpp

-my_func-2.h
-my_func-2.cppв

Собрал их в одну статическую библиотеку и появился один .lib файл.

В VS2017 я создаю новый проект, пишу:
C++
1
#pragma comment ("lib", путь к этому lib файлу)
То есть все что есть в этом .lib файле должно быть как бы помещено в итоговую программку нового проекта.

Если так и если содержимое всего .lib файла копируется в мой итоговый файл проекта, то зачем для использования в новом проекте функций my_func-1 и my_func-2 подключать заголовочные файлы ? Почему IDE или компилятор просто по .lib файлу не найдет соответствие вызванной функции my_func-1 и его my_func-1.h ?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,217
13.03.2020, 18:43
Цитата Сообщение от Optimus11 Посмотреть сообщение
Под библиотекой я имел ввиду, как бы ту часть, которая как бы уже готовая есть в бинарном виде.
Именно подключение той части "которая как бы уже готовая есть в бинарном виде" не имеет никакого отношения к вашей директиве #include <iostream>. Делать #include <iostream> вы можете сколько угодно. Это никак не повлияет и никак не связано с подключением той части.

Цитата Сообщение от Optimus11 Посмотреть сообщение
В VS2017 я создаю новый проект, пишу:
#pragma comment ("lib", путь к этому lib файлу)
Куда именно вы это пишете???

И зачем вы это делаете? Зачем вы используете #pragma comment ("lib" вместо того, чтобы подключать библиотеки традиционным способом?

Если вам нравится идти по этому нетрадиционному пути #pragma comment ("lib", то все равно множественного подключения библиотеки происходить не должно, даже если вы поместите ваш #pragma comment ("lib" в заголовочный файл. (Однако, возможно, путем манипуляций с путями можно обмануть компилятор и добиться множественного включения).

Цитата Сообщение от Optimus11 Посмотреть сообщение
зачем для использования в новом проекте функций my_func-1 и my_func-2 подключать заголовочные файлы ?
Как это "зачем"? В заголовочных файла содержатся объявления библиотечных функций, объявления сопутствующих типов и т.д. и т.п. Без этих объявлений вы не сможете вызывать функции библиотеки, т.е. не сможете пользоваться библиотекой.

Теоретически, чтобы сделать эти объявления, подключать заголовочные файлы не обязательно: вы можете сами руками написать эти объявления с нуля. Но зачем, если можно просто подключить готовый заголовочный файл?

Цитата Сообщение от Optimus11 Посмотреть сообщение
Почему IDE или компилятор просто по .lib файлу не найдет соответствие вызванной функции my_func-1 и его my_func-1.h ?
Не понимаю, о каком "соответствии" вы ведете речь. На основе чего формируется это соответствие? Откуда компилятору знать, какой .h файл какой библиотеке (или функции) соответствует?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.03.2020, 18:43
Помогаю со студенческими работами здесь

Подключение файлов main.cpp some.cpp some.h
Всем привет, программа разделенна на три файла poly.cpp main.cpp poly.h Кто мог бы объяснить как происходит подключение этих файлов, и как...

Вот: source_file.cpp: In function 'int main()': source_file.cpp:10:12: error: 'strlen' was not declared in this scope
#include&lt;iostream&gt; using namespace std; int main() { char a,b; int i,j; cout&lt;&lt;&quot;Напишите слово:&quot;; cin&gt;&gt;a; i=0; ...

С помощью командной строки >namberstr f1.cpp Определить число строк в файле с именем f1.cpp
С помощью командной строки &gt;namberstr f1.cpp Определить число строк в файле с именем f1.cpp

Main.cpp vs MainWindow
С недавних пор пробую свои силы на C++ в Qt. Создание и инициализацию объектов, используемых в оконных проектах, выполнял в конструкторе...

Разбить main.cpp на файлы
Есть вот такой main.cpp: #include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;string.h&gt; //#include &lt;stdint.h&gt; //#include...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru