В каких программах используется язык программирования с
Практически весь софт, который используется каждый день, имеет в своей основе код на языке Си.
1. Операционные системы
Язык Си был разработан специально для написания операционной системы Unix. Первые версии Unix были написаны на ассемблере. Язык Си был разработан именно как высокоуровневый язык для разработки больших программных систем. В 1972 году Деннис Ритчи создал язык Си и Unix была переписана на этом языке.
В 1985 году появилась операционная система Windows. Она также была написана на Си.
Компьютеры Apple работают на операционной системе macOS. Ядро этой операционной было написано на Си.
В 1991 на Си была написано ОС Linux. Около 97 процентов из 500 самых мощных суперкомпьютеров мира используют ядро Linux.
Операционные системы для мобильных устройств: iOS , Android и Windows Phone — имеют в своей основе ядра систем macOS, Linux и Windows.
То есть язык Си лежит в основе работы всего программного обеспечения от мобильных телефонов до суперкомпьютеров.
2. Программы с открытым исходным кодом
Язык Си — это язык общения программистов. Для коллективной работы создаются проекты с открытым исходным кодом (Open Source), в которых принимают участие множество программистов.
По данным крупнейшего каталога программ с открытым исходным кодом «Черная утка» более 45% этих программ написано на языке Си.
Индекс Черной утки
3. Драйверы устройств
Для подключения различных устройств к компьютеру: мышь, клавиатура, принтер, сканер и т.д., требуется специальная программа — драйвер. Так как драйвер должен взаимодействовать с операционной системой, а она написана на Си, то и драйвер разумнее писать на Си.
4. Языки программирования
Так компиляторы языка Си есть для всех типов компьютеров и при этом язык Си максимально универсален, то когда создается новый язык программирования, то обычно он пишется на языке Си.
На языке Си написаны:
Многие языки не только написаны на Си, но также используют элементы языка практически без изменений.
5. Базы данных
Самые популярные в мире базы данных, в том числе Oracle Database, MySQL, SQLite, MS SQL Server и PostgreSQL , написаны на языке Си. Это связано с тем, что базы данных должны иметь максимальную производительность и надежность.
На вопрос «Почему SQLite написано на Си?» разработчики отвечают:
6. Графические библиотеки
При работе с графикой необходимо максимальное быстродействие, поэтому графические библиотеки традиционно пишутся на Си, а в особо ответственных местах делаются вставки на языке ассемблера.
На Си написаны такие библиотеки как Cairo, OpenGL, SDL.
7. Встроенные системы
Сейчас нас окружают встроенные устройства. Вы купили кофе в торговом автомате. Это автомат запрограммирован на Си.
Оплачиваете на кассе покупки в супермаркете. Кассовый аппарат также запрограммирован на Cи.
Оплачиваете парковку. Парковочный автомат также запрограммирован на Си.
В вашем автомобиле много функций, также запрограммированных на Си. В числе них:
- автоматическая коробка передач
- системы определения давления в шинах
- датчики (кислород, температура, уровень масла и т. д.)
- память для сидений и настройки зеркал.
- дисплей приборной панели
- антиблокировочная система тормозов
- автоматический контроль устойчивости
- круиз-контроль
- контроль климата
- детские замки
8. Космос и авиация
Для авиакосмических приложений необходима максимальная надежность. Поэтому традиционно выбирается язык Си. На языке Си была написано программное обеспечение проекта высадки на Луну.
Сфера применения C и C++ на удивление широка. Даже в сегодняшнем мире, несмотря на всё многообразие современных надёжных инструментов, эти два языка программирования остаются незаменимыми. Давайте же выясним, какие популярные приложения написаны на этих языках и зачем нам использовать их сегодня.
1. Операционные системы
Язык C первоначально создавался для системного программирования, поэтому не удивительно, что его так активно применяют при создании операционных систем и программного обеспечения.
Быстрый и энергоэффективный, он достаточно близок к аппаратному слою, что позволяет работать с кодом низкого уровня.
Вот почему он идеален для разработки операционных систем.
Любая операционная система в первую очередь должна быстро запускаться и эффективно управлять системными ресурсами. Например, Linux, Microsoft Windows, Mac OS полностью написаны на языке C, а Android и iOS — частично.
Разработчик на языке C может реализовывать все структуры данных самостоятельно, производя тонкую настройку мельчайших деталей операционной системы. Такая высокая гибкость — весомый аргумент в пользу языка.
В отличие от других языков программирования, язык C не имеет зависимостей времени исполнения. Это означает, что программа может выполняться силами аппаратных средств без участия менеджера памяти, входного или выходного слоя.
2. Программирование встроенных систем
Язык программирования C просто необходим при проектировании встроенных систем.
Главным образом из-за высокой производительности и простоты использования. Язык C очень экономичен в потреблении ресурсов системы, благодаря чему программа выполняется быстро. В результате встроенные системы работают в реальном времени без замедления.
Ещё важнее здесь — код на C, будучи платформенно-независимым, не связан с каким-либо конкретным микропроцессором или системой. Так что встроенную программу можно скомпилировать в разных устройствах и платформах с незначительными изменениями или вовсе без них.
3. Разработка игр и игрового движка
Производительность крайне важна для игры, поэтому выбор языка программирования здесь ограничен.
Являясь самым быстрым на сегодняшний день языком программирования, С++ оказывается одним из лучших для игр в 3D, многопользовательских и других.
Например, Counter-Strike, StarCraft: Brood War, Diablo I, World of Warcraft — все эти игры написаны на C++. Не говоря уже о консолях Xbox и PlayStation, в основе которых лежит программирование C++.
В ядре игрового движка Unity — самого популярного движка для создания видеоигр под несколько операционных систем одновременно — также использовался C++.
Средства разработки C++ могут совладать даже с самой сложной игровой графикой. Они позволяют оптимизировать и регулировать то, как именно будут использоваться ресурсы памяти и структуры данных в игре.
4. Разработка настольных и кроссплатформенных приложений
C++ также можно использовать для создания настольных приложений. Всё благодаря превосходным кроссплатформенным средствам разработки (иногда называемым фреймворками), таким как Qt. Оно позволяет нацелиться на Windows, Linux, macOS, Android и встроенные системы — все c единой кодовой базой. Так что разработка приложений с помощью Qt оказывается отличным решением для тех, кто хочет сэкономить на времени и стоимости программирования.
Стоит упомянуть и о библиотеке SDL, нашпигованной функциями, позволяющими создавать приложения одновременно для Windows, Linux, Android, MacOS и iOS.
Кстати, Photoshop, Illustrator и Adobe Premiere целиком написаны на C++.
Какие ещё есть приложения?
В Facebook перевели часть кода из PHP на язык C++, чтобы сократить затраты электроэнергии в расчёте на одного пользователя. Возможно, облачные системы хранения, базы данных, драйверы устройств и другие виды ПО тоже используют C++.
Сюда также можно отнести банковские и другие приложения, обладающие высокой степенью многопоточности и низким периодом ожидания. Словом — всё, что должно работать быстро и без проблем.
Принимая во внимание всё вышесказанное, будем считать, что языки C/C++ вполне годятся для:
- разработки операционных систем,
- программирования встроенных систем,
- разработки игр,
- разработки баз данных,
- разработки настольных и кроссплатформенных приложений (с помощью средств C++).
Также можно отметить, что в проектах, имеющих дело со сложными типами данных, разработка ПО с использованием C++ предотвращает перегрузку данными и похожие проблемы.
Так что, если вы спросите:
Почему мы до сих пор используем C/C++?
Есть короткий ответ: C и C++ гибкие, очень быстрые и эффективные. К тому же они ближе к машинному коду, чем любой другой язык программирования. Именно поэтому в некоторых случаях эти языки просто незаменимы.
Так что наш прогноз таков: в ближайшем будущем язык C не сойдёт с технологической арены. Особенно по причине роста количества устройств, поддерживающих технологию Интернета вещей, а эти устройства крепко завязаны на управлении машинным кодом и памятью.
IT-эволюция — штука парадоксальная. Например, сначала на компьютерах моделировали нагрузку на АТС, затем программно управляли вызовами, а теперь телефония — это облачное решение, которое разворачивается за несколько минут и объединяет все корпоративные коммуникации.
Кажется, между этими изменениями мало общего. На самом деле они стали возможными благодаря принципам программирования, заложенным полвека назад. И чтобы лучше увидеть эту связь, мы решили вспомнить историю С++ — одного из самых «взрослых» языков программирования. Он может быть и удобным инструментом разработки, и ночным кошмаром, и частью корпоративной истории. std::begin( )
В это время рождались многие вещи, без которых мы не представляем жизнь сегодня: в американских гетто проводились первые рэп-баттлы, рок из лондонских трущоб начал экспансию мировых музыкальных чартов, а в академических кругах закладывался фундамент информационной революции.
Само слово «компьютер» ассоциировалось с чем-то огромным и невероятно сложным. Компьютеры состояли из громоздких транзисторных плат, занимали целые комнаты, выслеживали вражеские ракеты и решали сложные научные задачи. Каждая модель имела свою архитектуру, и даже машины одного производителя не всегда были совместимы. В программном обеспечении основная работа шла над общими стандартами и парадигмами языков программирования.
Большинство языков имело узкую специализацию: моделирование, машинные команды, высокоуровневые операции. Первой попыткой выйти за пределы научных задач и создать язык, объединяющий низкоуровневое и высокоуровневое программирование, стал язык CPL (Combined Programming Language), а затем его «облегчённая» версия BCPL (Basic Combined Programming Language), которые оказались удобными из-за их портируемости. В CPL впервые использовался промежуточный язык программирования O-code: frontend анализировал код и преобразовывал его в o-code, а на backend происходило преобразование o-code в машинный код. Этот язык, хоть и был удачен, также оставался громоздким.
На его основе сотрудник Bell Labs Кен Томсон создает язык В: удаляя из BCPL все лишние команды и сокращая количество символов в них.
Это было суровое время: советские зонды штурмовали Венеру, распались The Beatles, Стив Джобс собирал свой Apple I, а с появлением интегральных схем основной платформой стали мини-компьютеры. Они напоминали огромные шкафы, их становилось всё больше, требовалось переносить не только программы, но и операционные системы.
В недрах Bell Labs Деннис Ритчи и Кен Томсон решают перенести созданную ими ОС UNIX, а заодно и любимую компьютерную игру на другой компьютер и сталкиваются с тем, что у имевшихся на тот момент языков программирования просто не было нужных функций. Требовался новый язык, который бы легко компилировался, элементы программ использовали минимальное количество машинных команд, а базовые элементы языка не задействовали RTL. Взяв за основу язык B, Томсон и Ритчи создают язык С и переписывают на нём ядро UNIX. Это был первый высокоуровневый язык, который теснит ассемблер в разработке системного ПО.
Через десять лет с развитием интегральных микросхем и микропроцессоров на сцену вышли сначала микрокомпьютеры, напоминавшие упитанные клавиатуры, а затем и привычные нам персональные компьютеры. Их количество быстро росло, начали развиваться сетевые технологии, появились прикладные задачи, для которых уже не хватало имеющихся языков программирования.
Работая над теорией очередей и моделируя распределение вызовов по АТС, Бьёрн Страуструп из Bell Labs столкнулся с серьёзной проблемой. BCPL и его потомки работают быстро, но из-за близости к низкоуровневым языкам не подходят для разработки больших программ. С другой стороны, языки на основе Алгола или Фортрана имеют все нужные функции, но работают очень медленно.
C оказывается быстрым, легко портируемым и имеет много функций. Бьёрн добавляет классы, возможность их инкапсуляции и наследования, строгую проверку типов, встраиваемые функции и аргументы по умолчанию. Очень быстро «С с классами» получает собственное имя С++, где ++ - оператор приращения в С. Получившийся в результате зверь годится для задач моделирования, но остается таким же быстрым, как С.
С позволяет легко выстрелить себе в ногу; с C++ это сложнее, но, когда вы это делаете, ногу отрывает целиком
ПК проникли в каждый дом, а вслед за ними мир опутали линии интернета. От первых нод Фидонета до выделенных линий в каждый дом — сетевые технологии дали импульс развитию web-приложений и клиент-серверной архитектуры, для которых требовался надежный код и возможности низкоуровнего программирования. С++ подошёл для этого лучше всех. Неожиданно для Бьёрна он приобрёл огромную популярность: количество пользователей быстро достигло полутора миллионов и каждый год росло на 20%.
Первое время Бьёрн развивал язык сам, добавляя новые возможности в компилятор cfront. При этом он придерживался нескольких принципов: совместимость с С, поддержка различных стилей программирования, максимальная универсальность и простота среды программирования. Но постепенно запросов стало так много, что пришлось создать рабочую группу, и в 1998 году она выпустила первый официальный стандарт С++98. Стандарт состоял из ядра и стандартной библиотеки, которая включала Standard Template Library (STL) и изменённую стандартную библиотеку C. В С++98 добавили динамическую идентификацию (RTTI), виртуальные функции, тип bool, инкапсуляцию и преобразование шаблонов, расширили библиотеки.
Через пять лет после первого официального стандарта вышла следующая версия С++03, где появилась только одна новая функция — инициализация значения, но было исправлено множество ошибок в самом языке и его библиотеках. С этой версии добавляется требование, чтобы элементы вектора хранились смежно, так же, как в макете памяти массива, и std::vector начал работать.
Я мечтал, чтобы компьютеры стали такими же простыми в использовании, как телефоны. Недавно моя мечта сбылась: я не смог разобраться с моим новым телефоном
За сорок лет мир преобразился: суровые рокеры превратились в милых дедушек, а интернет — в страну высоких скоростей. Мир услышал об облачных технологиях. Все больше и больше привычных вещей улетало в облака, а С++ за счёт своей универсальности и надёжности оказался востребован в высоконагруженных приложениях. Кроме того, никому даже в страшном сне не приснилось бы переписывание всего кода на С++.
После версии С++03, язык находится в подвешенном состоянии, пока в 2011 году не выходит новый стандарт C++11, в котором совершенствуется ядро языка, добавляется многопоточность, улучшается поддержка обобщённого программирования, унифицируются инициализации. Многие вещи, которые и так присутствуют в большинстве компиляторов, официально добавлены в стандарт.
Красные электрокары бороздят Солнечную систему, учёные бьются над квантовыми компьютерами, развиваются распределённые системы, а облачные технологии становятся ещё доступнее. Протоколы связи совершенствуются, растёт скорость, компьютеры становятся меньше и увеличивается число «умных» устройств. Камеры, датчики, контроллеры — всем им нужны встроенные драйверы, а системы управления и сбора информации должны выдерживать огромные потоки данных.
Даже через столько лет С++ держит позиции и остаётся инструментом, способным почти на всё. В 2017 году выходит новый стандарт С++17, в котором этот язык ещё раз оптимизируют и добавляют новые возможности. Спустя тридцать лет удаляют устаревшее слово register, предназначенное для ручной оптимизации на ассемблере, устаревшие триграфы и другие небезопасные функции.
За любую универсальность приходится платить сложностью, и С++ здесь один из лидеров. Для каждого из его применений можно найти более удобный и эффективный инструмент в других языках. В нём отсутствует система модулей, сложный синтаксис и спецификация, он использует неудобные заголовочные файлы и долго компилируется. Заявленной кроссплатформенности можно достичь, но для этого требуются умения, опыт и черная магия.
Но всё-таки идея собрать всё в одном месте себя оправдала. Уникальность C++ в том, что его создателям удалось получить из других языков универсальный набор инструментов, из-за чего он подходит почти для всего: от операционных систем и драйверов устройств до прикладных программ, игр и приложений для встраиваемых систем. Его отличает высокая производительность и работа с памятью на низком уровне, поддержка различных стилей программирования, он позволяет автоматически вызывать деструкторы, перегружать операторы, управлять константностью объектов с помощью модификаторов const, mutable, volatile и с помощью дополнительных библиотек, например Boost.Spirit, встраивать предметно-ориентированные языки программирования в основной код. Да, сложно, но именно за это его и любят.
Основной причиной недовольства С++ является его несомненный успех. Кто-то правильно заметил, что существует два типа языков программирования: на которые постоянно матерятся и которые не используют
Си иногда называют подмножеством C++ или «C++ без классов», но это не совсем верно. Почему это не так, можно узнать в статье про C++.
Си поддерживает исключительно процедурное программирование. Никаких классов, ООП, наследования — только функции и структуры. К основным особенностям языка относятся:
- доступ к памяти через указатели (особые переменные, в которых хранится адрес объекта);
- активное использование структур и объединений;
- чистый стиль программирования (код проще отлаживать, но сложнее писать).
Си обычно используется в довольно специфичных и сложных задачах, потому что более лёгкие задачи проще сделать с помощью высокоуровневых языков. Мы отобрали несколько наиболее популярных применений Си.
Оптимизация участков кода на C++
Объектно-ориентированные возможности C++ часто обходятся дороже, чем «чистый Си», так как расходуют больше ресурсов (в частности оперативной памяти). Поэтому иногда код в стиле Си может быть эффективнее. Если нужно заставить какой-либо алгоритм работать быстрее — используйте процедурный стиль и откажитесь от встроенных инструментов C++ для ООП, например от полиморфизма.
Но если нужна действительно высокая скорость, лучше переписать часть кода на ассемблере.
Информационная безопасность
Сюда относятся сложные хакерские приёмы. Среди них:
- Использование уязвимостей: переполнения буфера, двойные удаления (повреждения кучи).
- Инъекция (сокрытие) кода. Если получить доступ к другому процессу, используя уязвимость, то можно спрятать свой код внутри чужого и заставить процесс выполнять его. Теперь скрытый код будет жить в «невинном» процессе, спрятанном от глаз пользователя.
- Перехват (hooking). Если вы хотите мониторить чьи-то взаимодействия с системой (нажатие клавиш, открытие файлов), вам, как правило, нужно вызывать отслеживающий код всякий раз, когда пользователь что-то делает. Для этого вы заменяете какой-либо фрагмент API операционной системы вашим кодом.
Почти для всех этих применений используется PIC код (position-independent code — код, не зависящий от адреса). Он может выполняться в любом месте памяти, независимо от того, где находится и кто его запустил. У PIC-кода нет доступа к глобальным переменным и таблицам, поэтому C++ для его написания не подойдёт (классам C++ нужны глобальные таблицы для реализации наследования).
Код ядра
Код, который выполняется в режиме ядра (kernel mode) имеет полный доступ к памяти и оборудованию: RAM, GPU, жёсткому диску. В режиме ядра работают:
- Аппаратные драйверы — здесь без доступа к железу не обойтись. Драйверы являются посредниками между пользовательским кодом (не в режиме ядра) и оборудованием.
- Ядро операционной системы. На Си, кстати, написано множество ядер ОС, в том числе Unix и Android.
Использовать для всего этого код на C++ почти невозможно, поскольку в режиме ядра нет доступа к тем же глобальным таблицам, о которых говорилось выше. Иногда в режиме ядра тоже необходим PIC код — например для загрузчика (bootloader). Загрузчик — самая первая программа, выполняющаяся при запуске ПК. Биос извлекает её из жёсткого диска, помещает в память и говорит процессору запустить эту часть памяти.
Embedded-разработка
Для программирования встраиваемых систем часто используется как Си, так и C++. Но Си имеет преимущество, поскольку позволяет разрабатывать встроенное ПО при ограниченных ресурсах — например когда у микроконтроллера очень мало RAM. Помимо Си также может пригодиться знание ассемблера (как вариант, ARM-ассемблера) для написания ассемблерных вставок, чтобы ещё больше оптимизировать код и получить доступ к специфичным инструкциям процессора.
Сегодня рассмотрим 8 популярных сред программирования на C++. Многие из них поддерживают также и другие языки.
Microsoft Visual Studio
Достоинства:
- Есть бесплатная версия Visual Studio Community.
- Встроенный интерфейс командной строки.
- API для подключения дополнительных инструментов отладки.
- Полный набор инструментов разработчика для создания и клонирования Git-репозиториев, управления ветвями и разрешения конфликтов слияния прямо в интегрированной среде разработки C++.
- Большой набор дополнений для расширения базовой функциональности.
Недостатки:
- Высокая стоимость платных версий Professional и Enterprise (от 45 долларов в месяц).
- Высокие требования к «железу».
- Нет версии для Linux.
Eclipse CDT
Eclipse — свободная интегрированная среда разработки модульных кроссплатформенных приложений, которая приобрела большую популярность среди разработчиков на Java, однако в данной статье мы рассмотрим выпуск Eclipse CDT (С/С++ Development Tooling). Данная среда является отличным выбором, так как Eclipse CDT не только обладает всеми необходимыми инструментами, но и бесплатна и работает под различными операционными системами: Windows/Linux/macOS.
Достоинства:
- Бесплатное использование.
- Автозавершение и другие возможности, которые помогают быстрее писать код.
- Большой набор плагинов для расширения функциональности.
- Развитое сообщество разработчиков, подробная документация.
- Встроенное юнит-тестирование, оптимизация тестов.
- Настраиваемый графический интерфейс.
Недостатки:
- Медленный запуск, потребление большого объёма памяти.
- Проблемы с обратной совместимостью.
- Возможны конфликты плагинов.
Sublime Text
Sublime Text — проприетарный текстовый редактор, написанный на C++ и Python. Разработан в 2008 году. У этого текстового редактора кода достаточно большое сообщество, поэтому нет проблем с поиском дополнений и обучающих материалов.
Достоинства:
- Можно пользоваться бесплатно.
- Не предъявляет высоких требований к «железу».
- Встроенная поддержка нескольких десятков языков программирования.
- Автозавершение и подсветка синтаксиса в текстовом редакторе кода.
- Большой выбор плагинов, написанных на Python.
Недостатки:
- Не такой хороший отладчик, как в Visual Studio и других IDE.
- Нет автосохранения файлов.
- Постоянно предлагает купить платную версию.
NetBeans
NetBeans — еще одна бесплатная интегрированная среда разработки. Позволяет создавать приложения на языках программирования Java, Python, PHP, JavaScript, C, C++ и ряде других. У этой интегрированной среды программирования C++ есть дистрибутива для платформ Microsoft Windows, Linux, FreeBSD, macOS , OpenSolaris и Solaris, а для всех остальных платформ есть возможность собрать NetBeans самостоятельно из исходников.
Достоинства:
- Бесплатная интегрированная среда разработки C++ .
- Кроссплатформенная поддержка.
- Большой выбор плагинов.
- Автозавершение кода, инструменты для рефакторинга.
- Развитое сообщество разработчиков.
Недостатки:
- Медленный запуск.
- Проблемы с собственным кэшем при сборке готовых программ.
- Для установки требуется JDK.
Qt Creator
Qt Creator — интегрированная среда разработки C++, доступная на Windows, Linux и macOS. Предоставляет бесплатную версию, которой можно пользоваться в течение 1 месяца. Предлагает полный набор инструментов разработчика, предназначенных для создания и развёртывания приложений.
Достоинства:
- Поддерживает отладку, профилирование, автозавершение кода и рефакторинг.
- Возможность компиляции проектов для разных ОС.
Недостатки:
- Большой вес приложений.
- Не всегда работает автозавершение кода.
- Дорогая платная версия.
- Нужна регистрация для скачивания бесплатной версии.
CLion
CLion — кроссплатформенная среда программирования на C++ от компании JetBrains. Включает в себя современные стандарты C ++, libc ++ и Boost. Поддерживает также другие языки программирования — Kotlin, Python, Rust и т.д. — «из коробки» или с помощью плагинов.
Достоинства:
- Удобные механизмы отладки приложений.
- Автозавершение кода.
- Поддержка VIM.
Недостатки:
- Нет бесплатной версии — только демо на 30 дней.
- Нет встроенного компилятора.
- Возникают проблемы с установкой компилятора.
CodeLite
CodeLite распространяется бесплатно и работает во множестве операционных систем: Windows 7/8/8.1/10, Debian, Ubuntu, Fedora, OpenSUSE, ArchLinux и macOS. Интерфейс прост и интуитивно понятен, что делает его весьма хорошим выбором для новичков. Также следует отметить, что последние версии этой интегрированной среды разработки C++ поддерживают проекты на PHP и Node.js.
Достоинства:
- Мощный инструмента автозавершения кода, основанный на собственном синтаксическом анализаторе.
- Плагины для работы с Git и SVN.
- Встроенный отладчик.
Недостатки:
Code::Blocks
Завершает нашу подборку бесплатная среда разработки Code::Blocks. Она позволит писать не только на С/С++, но и обеспечит поддержкой таких языков программирования, как Fortran и D (с некоторыми ограничениями). У набора инструментов разработчика есть возможность для расширения за счёт установки плагинов. У этой среды программирования на C++ есть версии под Windows, macOS и Linux, однако существует возможность установить её на любую Unix-подобную систему при помощи сборки исходников.
Достоинства:
- Бесплатная среда разработки C++.
- Автозавершение кода.
- Встроенный отладчик.
- Большой выбор плагинов для расширения функциональности.
Недостатки:
IDE помогают работать с языком, но чтобы его изучить, нужны время и ресурсы. Вот ещё пара полезных материалов, которые помогут вам освоить C++:
Читайте также: