В чём разница между g++ и gcc?
В чем разница между g++ и gcc? Какой из них следует использовать для общего разработки на C++?
5 ответ(ов)
GCC: GNU Compiler Collection
GCC (GNU Compiler Collection) — это набор компиляторов, поддерживающий различные языки программирования, такие как C и C++.
- gcc: компилятор для языка C
- g++: компилятор для языка 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++, чтобы избежать неожиданных проблем.
Неопределенная ссылка на виртуальную таблицу (vtable)
GCC: Разница между -O3 и -Os
Как вывести список символов из .so файла?
/usr/bin/ld: не удается найти -l<названиеБиблиотеки>
Почему GCC вызывает sqrt() из libc, не используя его результат?