c-cpp-cookies
  • Полезные материалы
    • About
  • Настройка окружения
    • Git
      • Git CLI
      • Git GUI
      • Git Web
      • Git в среде разработке
        • Visual Studio
        • Visual Studio Code
        • CLion
        • Qt Creator
    • Стандарты (они же ISO)
    • Qt about
    • IDE
      • Visual Studio Code
        • Код в Visual Studio Code
        • Разработка в Visual Studio Code
      • Visual Studio
        • Настройки Visual Studio и проектов
        • Код в Visual Studio
        • Visual Studio + GitHub
      • Qt + Qt Creator
        • Установка Qt и QtCreator
        • Примеры проектов на Qt
      • CLion
        • Настройки CLion
        • Код в CLion
        • CLion + GitHub
    • Компиляторы
      • Clang + Visual Studio
      • Clang + CLion
  • Best practices
    • Антипаттерны и способы улучшения кода
      • 0. Освобождение ресурсов
      • 1. Чтение данных из файла
      • 2. Открытие файлов
      • 3. Объявление переменных
      • 4. Выделение памяти
      • 5. Необдуманный код
      • 6. Глубокие if
      • 7. Длинные if
      • 9. Non-void функции
      • 10. Создание массивов
      • 11. Проверка формата файла
  • Сборка программы
    • Сборка программы
    • Системы сборки / Build systems
      • Проект и решение
      • Make
      • Ninja
      • CMake
      • MSBuild
    • Подключение внешних библиотек
    • Библиотеки
  • Отладка
    • Отладка / Debugging
    • Запуск программы
    • Точки останова / Breakpoints
      • Обычные точки останова / General breakpoint
      • Условные точки останова / Conditional breakpoint
      • Зависимые точки останова / Dependent breakpoint
      • Временные точки останова / Temporary breakpoint
      • Точки трассировки / Breakpoint actions и tracepoints
    • Стек вызовов / Call stack
    • Локальные переменные / Locals
    • Просмотр области памяти / Memory view
    • Исключения / Exceptions
  • Анализ
    • Поиск утечек памяти
    • Санитайзеры
  • Возможности IDE
    • Возможности IDE
    • Продвинутый текстовый редактор
    • Закладки / Bookmarks
    • Платформы / Platforms
    • Конфигурации сборки / Build configurations
    • Шаблонные проекты / Project templates
    • Терминал / Terminal
    • Сборка / Build
    • Запуск программы / Run program
    • Code style
    • Работа с Github Actions
  • Тестирование
    • Тестирование
    • Google test
      • Gtest в VS
      • Gtest в CLion
      • Gtest в VSCode
    • Покрытие кода (code coverage)
Powered by GitBook
On this page
  • Примечания про компиляторы
  • Об особенностях компиляторов
  1. Настройка окружения

Компиляторы

PreviousCLion + GitHubNextClang + Visual Studio

Last updated 7 months ago

Компилятор, сделай мне хорошо Цитаты великих людей

Выделим наиболее популярные компиляторы:

  • (clang c, clang++, далее LLVM). Скачать собранную версию можно по ссылке: .

  • (далее MSVC). Поставляется вместе с Visual Studio.

  • (icx c, icx c++). Скачиваем : Select OS - Offline installer - Continue as a Guest (download starts immediately) /* под большой кнопкой Sign up & download */.

  • (gcc, g++).

  • . GCC для Windows.

Примечания про компиляторы

Clang не является полностью самостотельным компилятором и для работы с ним нужны библиотеки от "родных для ОС" компиляторов: msvc для Windows и gcc для остальных. Поэтому для использования clang нужно установить Visual Studio на Windows.

На данный момент Intel выпускает набор инструментов для разработки Intel OneAPI, в который входит новый компилятор от Intel, представляющий собой по сути LLVM (Clang), но с существенно другим генерируемым кодом. Версии компилятора до Intel OneAPI и Legacy компилятор в OneAPI – это самостоятельная разработка Intel.

Если вы используете GCC/G++ (он же MinGW под Windows), то велик шанс (по незнанию) использования нестандартных библиотек и заголовочных, поставляемых только с этим компилятором. Могут возникать проблемы при написании кроссплатформенного-кросскомпиляторного кода.

Чтобы поставить компилятор в Visual Studio, нужно выбрать Разработка классических приложений на С++.

Об особенностях компиляторов

Разные компиляторы предлагают разные функции и (часто) разрабатываются разными командами разработчиков, поэтому у них разные детали реализации. Все компиляторы С и C++, соответствующие стандарту ISO, должны быть способны преобразовать вашу исходную программу в целевую программу с одинаковым наблюдаемым поведением.

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

Еще один интересный момент, который следует рассмотреть, – это реализация стандартной библиотеки. По крайней мере, GCC, LLVM и MSVC поставляют свою собственную реализацию стандартной библиотеки с соответствующими компиляторами. Эти реализации будут отличаться, учитывая лицензирование и корпоративную поддержку компиляторов.

Следующее различие между компиляторами заключается в оперативности – насколько быстро добавляется поддержка последних нововведений стандарта (опубликованные ISO). GCC и Clang часто первыми предлагают поддержку новых функций C++, MSVC очень быстро поддерживает, что хотят, и много лет не поддерживают, что не хотят. Все GCC, Clang и MSVC также поддерживают некоторые экспериментальные функции и собственные расширения, ни с чем больше не совместимые.

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

Пример с OpenMP: Поддержка OpenMP в MSVC по умолчанию достаточно древняя (2.0), некоторые возможности более новых версий можно получить в новых версиях MSVC указанием специального ключа компиляции (и некоторыми заморочками с dll). В это время последние версии и версию 4.5 и часть функционала версий 5.0 и выше.

GCC
Clang поддерживают
(C)
Clang
https://github.com/llvm/llvm-project/releases
Visual C++
Intel
отсюда
GCC
MinGW
Visual Studio