В чём разница между g++ и gcc?
В чем разница между g++ и gcc? Какой из них следует использовать для общего разработки на C++?
5 ответ(ов)
GCC: GNU Compiler Collection
GCC (GNU Compiler Collection) — это набор компиляторов, поддерживающий различные языки программирования, такие как C и C++.
gcc
: компилятор для языка Cg++
: компилятор для языка C++
Основные отличия:
gcc
компилирует файлы*.c
как C и*.cpp
как C++ соответственно.g++
компилирует файлы*.c
и*.cpp
, но все они будут рассматриваться как файлы на C++.- Если вы используете
g++
для линковки объектных файлов, он автоматически подключает стандартные библиотеки C++ (в то время какgcc
этого не делает). gcc
, компилируя C файлы, имеет меньше предопределенных макросов.- При компиляции
*.cpp
с помощьюgcc
и*.c
,*.cpp
с помощьюg++
, доступны несколько дополнительных макросов.
Дополнительные макросы при компиляции *.cpp
файлов:
#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern
Если у вас есть конкретные вопросы по использованию gcc
и g++
, не стесняйтесь спрашивать!
Для C++ вам следует использовать g++.
Это один и тот же компилятор (например, часть GNU Compiler Collection). GCC и G++ просто выбирают разные фронтенды с различными значениями по умолчанию.
В nutshell: если вы используете g++, фронтенд сообщит компоновщику, что вам может понадобиться связать вашу программу с библиотеками стандартного C++. Фронтенд gcc этого не сделает (хотя он может связать с ними, если вы передадите правильные параметры командной строки).
Одно из заметных различий заключается в том, что если вы передаете файл с расширением .c
компилятору gcc, он будет скомпилирован как C. В то же время, по умолчанию g++ обрабатывает файлы с расширением .c
как C++ (если не указано -x c
).
Хотя команды gcc
и g++
выполняют очень похожие задачи, g++
специально предназначена для компиляции программ на C++. Она нацелена на то, чтобы автоматически делать правильные вещи.
Под капотом эти две команды на самом деле представляют собой одну и ту же программу. Как я понимаю, обе команды определяют, как компилировать программу - как на C или как на C++ - в зависимости от расширения файла. Обе команды могут связываться с стандартной библиотекой C++, но только g++
делает это по умолчанию. Таким образом, если у вас есть программа на C++, которая не требует связывания со стандартной библиотекой, gcc
выполнит правильные действия; но тогда и g++
тоже. В итоге, нет никаких причин не использовать g++
для общего развития на C++.
GCC и G++ — это оба компилятора от GNU. Они компилируют C и C++, но есть важные различия в их работе с файлами. Когда вы компилируете файлы с расширением *.c
, GCC обрабатывает их как программы на C, тогда как G++ рассматривает их как программы на C++. Файлы с расширением *.cpp
всегда считаются программами на C++.
C++ является надмножеством C, и синтаксис в C++ более строгий, поэтому следует быть внимательным при выборе суффикса для файлов. Это означает, что если вы используете функции или конструкции, специфичные для C++, в файле с расширением .c
, вы можете столкнуться с ошибками компиляции при использовании G++. Рекомендуется использовать G++ для файлов на C++, чтобы избежать неожиданных проблем.
В чем разница между #include <filename> и #include "filename"?
Когда использовать виртуальные деструкторы?
Какова разница между 'typedef' и 'using'?
Циклы в программном обеспечении для семейных деревьев
Что означает 'const' в конце объявления метода класса?