Так что да, вопросы в названии. Но причина, по которой я спрашиваю, заключается в том, что я беру видеоуроки в The New Boston (кстати, это потрясающе), и мне было интересно; Зачем нам сами импортировать библиотеки? и я не имею в виду каждый lib в C++, созданный каждым программистом, но наиболее часто используемые, такие как cstdlib или cmath?Почему не все C++-библиотеки включаются автоматически при запуске?
ответ
Здесь есть две разные вещи. Когда вы создаете приложение, система сборки ссылается на стандартную библиотеку, а компоновщик извлекает любой код из этой библиотеки, а также любые другие, которые вы, возможно, указали.
Что вы говорите здесь о не библиотеки, но заголовки. Заголовки описывают содержимое исходных файлов, поэтому вы можете скомпилировать исходный файл и ссылаться на вещи, которые определены где-то в другом месте. Например,
#include <stdio.h>
int main() {
puts("Hello, world");
return 0;
}
Заголовок <stdio.h>
сообщает компилятору, что есть функция с именем puts
, которая может быть вызвана с строковой литерал ("Hello, world\n"
) в качестве аргумента. Эта функция определена в стандартной библиотеке, поэтому ссылка на стандартную библиотеку получает код, который делает эту работу.
В отличие от Java, разработчики C++ решили, что компилятор не должен ласкать ваш жесткий диск, чтобы попытаться выяснить, какие вещи вы хотите использовать в своем коде. Вы должны сказать это, и заголовки - это механизм для этого. Использование большего количества заголовков, чем вам нужно, требует обработки большего количества текста, чем вам нужно, а это, в свою очередь, означает более медленную компиляцию.
Ahhh, поэтому у конкретных библиотек есть определенные заголовки, и один из этих libs - это заголовок с именем
, который дает вам (функцию). Итак, компилятор похож на каталог, который я предполагаю. Он должен перейти кЗаголовок - это текстовый файл. Когда компилятор видит '#include whatever', он читает текст из этого файла, как если бы он был частью файла, который он компилирует. Больше ничего. На этом этапе я предлагаю вам игнорировать детали заголовков и библиотек. Позже вы начнете писать программы, которые состоят из более чем одного исходного файла, и вы узнаете все о заголовках и ссылке, когда вы это сделаете. –
Сладкий, приветствует человека, спасибо за помощь. Сложно начать программирование (как я уверен, вы знаете), поэтому хорошо, что люди на этом сайте, как и вы, предлагают некоторые рекомендации. –
Включая библиотеки. Их символы делают компиляцию более длинной, и они делают полученный исполняемый файл более крупным. Имена в некоторых библиотеках могут конфликтовать с именами в других или с именами в вашем собственном коде. Если они «импортированы» автоматически, то как бы вы их «unimport»? Кто решает, что «широко используется»? Я редко использую stdlib в проектах на C++. Иногда я использую математику, но не часто.
Я не могу придумать язык с «пакетами», который импортирует по умолчанию. (Java, C#, python, C/C++)
' java.lang' автоматически импортируется, нет? Точно так же содержимое «исключений» в Python2, но в Python3 они просто встроены. –
Причина, по которой даже стандартные заголовки библиотек C++ не включаются автоматически, потому что это (по крайней мере) значительно увеличило бы время компиляции. См., Включение заголовочного файла просто вставляет его содержимое на сайт оператора #include
, поэтому вы можете завершить очень длинную единицу перевода, даже если на самом деле вам не нужен код.
Вопрос в том, что если вы включите все, компилятор займет гораздо больше времени для анализа и компиляции ваших проектов. Иногда бывает больно в заднице, когда дело доходит до mpl (мета шаблонная программа), поскольку stl в основном написана в шаблонах.
Но вы можете использовать самые распространенные библиотеки и импортировать их каждый раз, когда вы настраиваете новый проект.
«Импорт» - неправильный термин. Эти библиотеки, без файлов заголовков для библиотек, являются «include» d. Файлы #include
сообщают компилятору о сигнатуре различных функций и других полезных определениях. Если вы включите все под Солнцем автоматически, это увеличит работу компилятора и приведет к более длительному времени компиляции. Это также заставит компилятор потребовать больше памяти. Дополнительным преимуществом является то, что компилятор знает намерения программиста при наличии соответствующих заголовков.
C/C++ нацелен на то, чтобы держать код плотным, с меньшим размером кода. Они хотят, чтобы использование памяти было максимально эффективным, и эта философия находит свое отражение и в компиляторе.
- 1. Радио кнопки не включаются, почему?
- 2. Почему @IBAction автоматически вызывается при запуске?
- 3. Почему python автоматически не импортирует каждый модуль при запуске?
- 4. Почему в mailto не включаются параметры ссылки?
- 5. JQuery - флажки не включаются
- 6. Огурцы не загружаются автоматически при запуске функций
- 7. R + NA не включаются
- 8. автоматически запускать программу при запуске
- 9. Автоматически требуется класс при запуске/запуске ruby
- 10. Не запускать MySql автоматически при запуске Centos
- 11. Почему код внутри классов выполняется автоматически при запуске рубинового скрипта?
- 12. Служба CRON работает неправильно при запуске автоматически
- 13. почему эта функция автоматически выполняется при запуске приложения
- 14. eclipse e4 автоматически восстанавливает перспективы при запуске
- 15. p4v автоматически синхронизируется с головкой при запуске
- 16. Как создать сценарии AHK автоматически при запуске?
- 17. Cytoscape.js - не добавляя все «ele» при запуске
- 18. Почему Rhino.ServiceBus автоматически создает все мои очереди?
- 19. Запуск Quarz Scheduler автоматически при запуске Tomcat
- 20. Почему изменения erlang lib не включаются в мой проект?
- 21. Есть ли способ узнать, какие заголовки автоматически включаются в
- 22. XAMPP Запуск автоматически при запуске Windows 7
- 23. Quartz.Net служба планировщика не запускается автоматически при запуске
- 24. Запуск программы автоматически при запуске скрипта
- 25. Visual Studio 2015 и TFS - все исключенные изменения включаются обратно автоматически
- 26. Как сделать Autohotkey автоматически запускаемым при запуске?
- 27. XLConnect загружается автоматически при запуске сеанса R
- 28. Как автоматически запускать чайник при запуске изображения?
- 29. как запустить команду «sudo ...» автоматически при запуске?
- 30. Как открывать файлы автоматически при запуске emacs?
Зачем компилятор разбирать и компилировать то, что вам может не понадобиться? – jrok
Что вы подразумеваете под «импортом библиотек»? Стандартные библиотеки C и C++ * связаны * с программами по умолчанию. –
** упрощенный ** ответ заключается в том, что компилятор должен был бы прочитать все стандартные .h для каждого из ваших .c, которые были бы медленными. –