38 / 36 / 4
Регистрация: 10.01.2017
Сообщений: 1,397
1

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

13.03.2020, 13:32. Показов 1452. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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;...

Есть три файла. файл 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;...

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

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

7
16255 / 8819 / 2159
Регистрация: 30.01.2014
Сообщений: 15,230
13.03.2020, 13:43 2
Optimus11, начать с того, что "текста библиотеки" в exe нет никакого: ни лишнего, ни нелишнего.

Цитата Сообщение от Optimus11 Посмотреть сообщение
библиотеки isotream - будет как бы два экземпляра ?
Нет, не будет.
У вас пропущен базовый пласт знаний, из-за этого у вас такие абсурдные суждения.
Вот: https://www.youtube.com/watch?v=G_jcBrrYPAs
1
6571 / 4556 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
13.03.2020, 13:43 3
Цитата Сообщение от Optimus11 Посмотреть сообщение
То есть для того, чтобы функция my_func скомпилировалась, нужно включить в нее библиотеку isotream, и вот вопрос: в итоге в самом exe файле самой этой библиотеки isotream - будет как бы два экземпляра ? Или компилятор умный и все повторы уберет и текст библиотеки iostream - будет только один ?
Это не библиотека, это заголовочный файл.
В любом случае, все функции, которые не-inline будут только по одному разу.
1
38 / 36 / 4
Регистрация: 10.01.2017
Сообщений: 1,397
13.03.2020, 16:13  [ТС] 4
Цитата Сообщение от DrOffset Посмотреть сообщение
Optimus11
У вас пропущен базовый пласт знаний, из-за этого у вас такие абсурдные суждения.
Вот: https://www.youtube.com/watch?v=G_jcBrrYPAs
А вообще эти знания в каких случаях применяется ? Или как часто ?
Я просто даже не могу представить в каких случаях.
0
16255 / 8819 / 2159
Регистрация: 30.01.2014
Сообщений: 15,230
13.03.2020, 16:16 5
Optimus11, всегда.

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

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

Забудьте эту странную "пионэрскую" манеру назвать включение заголовочных файлов "включением библиотек" и подобные вопросы отпадут сами собой.
1
38 / 36 / 4
Регистрация: 10.01.2017
Сообщений: 1,397
13.03.2020, 18:26  [ТС] 7
Цитата Сообщение от 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Эксперт С++
10262 / 5559 / 1523
Регистрация: 18.10.2014
Сообщений: 13,571
13.03.2020, 18:43 8
Цитата Сообщение от 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2020, 18:43
Помогаю со студенческими работами здесь

Вот: 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;Напишите...

С помощью командной строки >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...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru