Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Как сильно отличаются компиляторы C++ MinGW и встроенный в Visual Studio?

Для начала уточню, что я сам не программист, но пока пытаюсь сделать какой-то для себя выбор. Но вопрос не об этом.
MinGW достаточно большой компилятор, и при его использовании остается меньше сомнений, что его не будет достаточно.
Однако, пытаясь компилировать в MinGW код, написанный для Visual Studio, выходили ошибки. Я бы не сказал, что код был сложный, но это заставляет просто ещё раз задуматься.
Слишком ли отличаются эти компиляторы? Если выбирать между этими двумя, какой будет более надежным и полноценным?
ПрограммированиеПрограммы+3
DJ Ruben
  · 4,5 K
Лучший
Веб-разработчик, геймер, специалист по этике  · 19 сент 2022
В программировании на плюсах я, скажем так, любитель, но на то, чтобы кое-что вам в этом вопросе объяснить, хватит даже меня. Вам, кстати, нужно быть повнимательнее к сообщениям об ошибках, которые вам выдают ваши инструменты. "Выходили ошибки" это сообщение с нулевым количеством информации, нужно знать конкретно, что было написано и после каких действий.
Так вот, MinGW это вообще не компилятор. Это набор утилит из проекта GNU, скомпилированных под Windows. В этот набор, среди прочего, входит традиционный для GNU набор компиляторов под названием GCC, частью которого является компилятор C++ под названием g++.
Компилятор C++, поставляющийся вместе с Visual Studio, традиционно называется MSVC (MS Visual С++). Для него, строго говоря,  не нужен сам Visual Studio.
Поэтому вопрос, который вас на самом деле интересует, это "чем различаются GCC и Visual C++". Два самых радикальных отличия это следующие.
1. Платформа
MSVC полагается на нативные библиотеки Windows, и, соответственно, поддерживает их. DirectX, Win32 API, WPF, даже стандартная библиотека C++ упакованы в DLL, доступные только на винде. Помните, как некоторые приложения Windows при запуске требуют, чтобы вы доустановили в систему нечто под названием Microsoft Visual C++ Redistributable? Это, грубо и упрощённо говоря, стандартная библиотека C++ плюс библиотеки специфичные для Windows типа реализации заголовочного файла windows.h. Скомпилированные для использования в Windows.
Да, в MSVC с недавних пор есть кросс-компиляция под Linux, но это извращения для эстетствующих профессионалов. Да и код можно писать кроссплатформенный, до определённой степени (до пользовательского интерфейса). Но всё же, если вы компилируете в MS Visual C++, вы, фактически, целитесь на то, что ваше приложение будет оптимизировано под технологии, доступные на Windows.
В то же время, для нормальной работы тулчейна GCC, ему нужно целое окружение из других утилит проекта GNU. Собственно, по этой причине существует именно весь проект MinGW, а не просто GCC, перекомпилированный под Windows. И здесь у нас ситуация обратная - то, что нативно доступно в Windows, нам не доступно, зато доступны некоторые вещи, родные для GNU/Linux, например, библиотека потоков pthreads.
Там, наверное, есть детали, о которых я не знаю, те, кто программирует на плюсах каждый день, может меня поправить, но в целом ситуация выглядит именно так.
MinGW упрощает жизнь, если вы собираетесь компилировать своё приложение и под Windows, и под дистры GNU/Linux, и страшно усложняет жизнь, если кросс-компиляция вас не интересует. Да, VS можно настроить на использование альтернативных компиляторов, но сам этот процесс требует очень большого уже имеющегося опыта.
2. Поддержка C++
C++ язык развивающийся, и есть как минимум четыре мажорных релиза, серьёзно различающихся возможностями: C++98, C++11, C++17 и нынешний C++20. Вторая ключевая разница между компиляторами C++ в том, какие возможности этих стандартов они поддерживают. Судя по всему, к 2022 году базовые возможности языка на уровне C++20 поддерживают оба этих компилятора, и дальше борьба уже идёт за C++23. А если вы присмотритесь внимательно к этой таблице по ссылке, то увидите, что кроме GCC и MSVC есть и много других компиляторов C++, например, подающий большие надежды Clang. И, как подтверждение моих слов про MinGW выше, вместо GCC вы можете в MinGW использовать Clang.
Вообще вопрос этот можно считать одним из древнейших холиваров в Сети, таких же как и "Vim против EMACS", "GNU/Linux против Windows против OSX", "четыре пробела или табуляция", "скобки или отступы" и многих других.
Спасибо за подробности.)