В чем разница между g ++ и gcc? Какие из них следует использовать для разработки общего с ++?В чем разница между g ++ и gcc?
ответ
gcc
и g++
являются компилятор-водители 'Gnu Compiler Collection ' (который был когда-то просто 'Гну C Compiler').
Несмотря на то, что они автоматически определяют, какие серверы (cc1plus
...) для вызова в зависимости от типа файла, если не переопределены -x language
, у них есть некоторые отличия.
Возможно, наиболее важным отличием их значений по умолчанию является то, с какими библиотеками они связаны автоматически.
Согласно [1] и [2], g++
эквивалентно gcc -xc++ -lstdc++ -shared-libgcc
(1-й является опция компилятора, то второй два являются опции компоновщика). Это можно проверить, запустив оба варианта с опцией -v
(он отображает выполняемые команды привязки бэкэнда).
Для C++ вы должны использовать g ++.
Это тот же самый компилятор (например, сборник компилятора GNU). GCC или G ++ просто выбирают другой интерфейс с различными параметрами по умолчанию.
В двух словах: если вы используете g ++, внешний интерфейс скажет компоновщику, что вы можете связать с стандартными библиотеками C++. Интерфейс gcc не будет делать этого (также он может связываться с ними, если вы передадите правильные параметры командной строки).
Единственным заметным отличием является то, что я вам передать .c для GCC будет компилировать как С, в то время как г ++ всегда будет относиться к ней как C++
(Позднее, но для потомков). Как указывали другие ответы, это ни в коем случае не является «единственной заметной разницей», если у читателя нет искаженного определения. – 2015-09-13 21:54:29
Хотя GCC и г ++ команды делают очень сходные вещи, г ++ разработан быть командой, которую вы вызываете для компиляции программы на C++; он предназначен, чтобы автоматически делать правильные вещи.
За кулисами они действительно являются одной и той же программой. Насколько я понимаю, оба решают, следует ли компилировать программу как C или C++ на основе расширения имени файла. Оба могут связываться с стандартной библиотекой C++, но только g ++ делает это по умолчанию. Так что если у вас есть программа, написанная на C++, которая не нуждается в ссылке на стандартную библиотеку, gcc будет делать правильные вещи; но тогда, g ++. Поэтому нет никакой причины не использовать g ++ для общей разработки на C++.
GCC: GNU Compiler Collection
- ссылающихся на всех различных языках, поддерживаемых компилятором GNU.
GCC: GNU C Компилятор
г ++: GNU C++ Compiler
Основные отличия:
- НКУ будет компилировать.: * .c/* файлы CPP как C и C++ соответственно.
- g ++ скомпилирует: *.c/*. cpp, но все они будут рассматриваться как файлы C++.
- Также, если вы используете g ++ для связывания объектных файлов, он автоматически связывается в std-библиотеках C++ (gcc не делает этого).
- gcc компиляция файлов C имеет меньше предопределенных макросов.
- gcc компиляция * .cpp и g ++ компиляция * .c/*. Cpp файлы имеет несколько дополнительных макросов.
Дополнительные макросы при компиляции * .cpp файлов:
#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern
Вы можете связать библиотеку std C++ в `gcc`, передав параметр` -lstdC++ `. – 2010-08-23 00:13:26
Есть больше различий между 'gcc' и 'g ++', чем только стандартные библиотеки, поэтому `gcc -lstdC++` по-прежнему не будет получать то же поведение, что и `g ++`. Мы поместили все это специфическое для языка поведение в свой собственный драйвер по какой-то причине, вот для чего он и есть. :-) – 2013-01-28 21:03:33
«GCC» является общим термином стенография для GNU Compiler Collection. Это и самое общее имя для компилятора, и имя, используемое, когда акцент делается на компиляции программ на C (как сокращенное ранее выражение для «компилятора GNU C»).
При обращении к компиляции C++ обычно вызывается компилятор «G ++». Поскольку существует только один компилятор, его также можно назвать «GCC» независимо от языкового контекста; однако термин «G ++» более полезен, когда акцент делается на компиляции программ на C++.
Вы можете прочитать больше here.
gcc и g ++ - оба компилятора GNU. Они компилируют c и C++. Разница заключается в * .c файлах gcc рассматривает его как программу c, а g ++ рассматривает его как программу на C++. * .cpp-файлы считаются C++-программами. C++ - это супер-набор c, а синтаксис более строгий, поэтому будьте осторожны с суффиксом.
я заинтересовался вопросом и выполнить некоторые эксперименты
Я обнаружил, что описание here, но это очень мало.
Затем я попытался экспериментировать с gcc.exe и г ++ ехом на моем окне машины:.
$ g++ --version | head -n1 g++.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3 $ gcc --version | head -n1 gcc.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3
Я попытался скомпилировать C89, C99 и C++ 1998 простых тестовые файлы, и это работа хорошо для меня с правильными расширениями соответствия для языка
gcc -std=c99 test_c99.c gcc -std=c89 test_c89.c g++ -std=c++98 test_cpp.cpp gcc -std=c++98 test_cpp.cpp
Но когда я пытаюсь запустить «гну коллекцию составителя» инструмент в этой моде:
$ gcc -std=c++98 test_cpp.c cc1.exe: warning: command line option '-std=c++98' is valid for C++/ObjC++ but not for C [enabled by default]
Но это одна до сих пор работают без ошибок
$ gcc -x c++ -std=c++98 test_cpp.c
И это также
$ g++ -std=c++0x test_cpp_11.cpp
P.S.Тестовые файлы
$ cat test_c89.c test_c99.c test_cpp.cpp
// C89 compatible file
int main()
{
int x[] = {0, 2};
return sizeof(x);
}
// C99 compatible file
int main()
{
int x[] = {[1]=2};
return sizeof(x);
}
// C++1998,2003 compatible file
class X{};
int main()
{
X x;
return sizeof(x);
}
// C++11
#include <vector>
enum class Color : int{red,green,blue}; // scoped enum
int main()
{
std::vector<int> a {1,2,3}; // bracket initialization
return 0;
}
Выводы:
Если посмотреть на дереве процессов, то кажется, что GCC, и г ++ является бэкенд с другими инструментами, которые в моей среде являются: cc1plus.exe, cc1.exe, collect2.exe, as.exe, ld.exe
НКУ работает отлично, как metatool для если у вас есть правильное расширение или установить правильные -std -x флаги. См this
В чем разница между g++
и gcc
?
gcc
превратился из единого языка «Компилятор GNU C» в многоязычную сборник компиляторов GNU. Термин «компилятор GNU C» по-прежнему используется иногда в контексте программирования на C.
g++
является компилятором C++ для сборника компиляторов GNU. Например, gnat
является компилятором Ada для gcc
. see Using the GNU Compiler Collection (GCC)
Например, на Ubuntu 16.04, man g++
приведена справочная страница GCC(1)
.
В man gcc
говорится, что ...
g++
принимает в основном те же параметры, какgcc
и что по умолчанию ...
... использование
gcc
не добавляет библиотеку C++.g++
- это программа , которая вызывает GCC и автоматически указывает ссылку на библиотеку C++ . Он обрабатывает файлы .c, .h и .i как исходные файлы C++ вместо исходных файлов C, если не используется значение -x. Эта программа также полезна, когда предварительно скомпилирует файл заголовка C с расширением .h для использования в C++ компиляциях.
Обыщите gcc
страницы человека для нравов сведения о опционных дисперсиях gcc
и g++
.
Какой из них следует использовать для разработки общего C++?
Либо gcc
, либо g++
могут использоваться для общей разработки на С ++ с применимыми настройками параметров. Тем не менее, поведение g++
по умолчанию более естественно согласовано с развитием C++.
Я тестировал gcc и g ++ в системе linux. Используя MAKEFILE, я могу определить компилятор, используемый «GNU make».Я тестировал с так называемой «динамической памяти» местонахождение особенность «C плюс плюс» по:
int main(){
int * myptr = new int;
* myptr = 1;
printf("myptr[0] is %i\n",*myptr);
return 0;
}
Только г ++ может успешно компилируется на моем компьютере, в то время как GCC будет сообщить об ошибке
undefined reference to `operator new(unsigned long)'
Так что мой собственный вывод gcc не полностью поддерживает «C plus plus». Кажется, что выбор g ++ для исходных файлов на C++ - лучший вариант.
- 1. В чем разница между GCC -ggdb и GCC -g
- 2. В чем разница между gcc/g ++ и cc1/cc1plus?
- 3. gcc: В чем разница между «-g» и «-ggdb»?
- 4. Разница между CC, gcc и g ++?
- 5. GCC -g vs -g3 GDB Flag: В чем разница?
- 6. какая разница в __cyg_profile_function_enter между gcc и g ++?
- 7. Разница в производительности между gcc и g ++ для программы C
- 8. В чем разница между: g и:% s командами в vim
- 9. В чем разница между ссылками GCC и LD?
- 10. В чем разница между текущей переменной context_app и g?
- 11. В чем разница между версиями g ++ 4.0.0.8 и 4.3.2?
- 12. В чем разница между ND-буфером и G-буфером?
- 13. В чем разница между -O0, -O1 и -g
- 14. разница между -lgcc_s и gcc
- 15. разница между -Wconversion между GCC и г ++
- 16. В чем разница между параметрами `-fpic` и` -fPIC` gcc?
- 17. В чем разница между gcc __sync_bool_compare_and_swap и cmpxchg?
- 18. В чем разница между компиляторами Borland, GCC и MinGW?
- 19. В чем разница между символами -symbolic и -shared GCC?
- 20. printf нулевая разница между% g и% f
- 21. Разница между clang и gcc
- 22. Связь между gcc, g ++, cygwin и wingw?
- 23. В чем разница между g ++ в android и g ++ в ubuntu?
- 24. Разница между pure-g и pure-gr
- 25. В чем разница между DLDFLAGS и LDFLAGS
- 26. GNU gcc и g ++
- 27. В чем разница между hpp и hxx?
- 28. В чем разница между «и»?
- 29. В чем разница между `{}` и `[]`?
- 30. В чем разница между == и ===?
Фактический компилятор - «cc1» для C и «cc1plus» для C++; gcc и g ++ - это драйверы (которые при необходимости требуют препроцессора/компилятора/ассемблера/компоновщика). – CesarB 2008-10-23 14:34:12
Этот ответ довольно бесполезен, он сводится к «Есть различия, например, некоторые библиотеки». Какие библиотеки? Какие еще отличия помимо библиотек? Понятия не имею, почему у него так много оборотов. – Malcolm 2015-09-16 08:11:36