2008-10-05 7 views

ответ

530

gcc и g++ являются компилятор-водители 'Gnu Compiler Collection ' (который был когда-то просто 'Гну C Compiler').

Несмотря на то, что они автоматически определяют, какие серверы (cc1plus ...) для вызова в зависимости от типа файла, если не переопределены -x language, у них есть некоторые отличия.

Возможно, наиболее важным отличием их значений по умолчанию является то, с какими библиотеками они связаны автоматически.

Согласно [1] и [2], g++ эквивалентно gcc -xc++ -lstdc++ -shared-libgcc (1-й является опция компилятора, то второй два являются опции компоновщика). Это можно проверить, запустив оба варианта с опцией -v (он отображает выполняемые команды привязки бэкэнда).

+131

Фактический компилятор - «cc1» для C и «cc1plus» для C++; gcc и g ++ - это драйверы (которые при необходимости требуют препроцессора/компилятора/ассемблера/компоновщика). – CesarB 2008-10-23 14:34:12

+26

Этот ответ довольно бесполезен, он сводится к «Есть различия, например, некоторые библиотеки». Какие библиотеки? Какие еще отличия помимо библиотек? Понятия не имею, почему у него так много оборотов. – Malcolm 2015-09-16 08:11:36

58

Для C++ вы должны использовать g ++.

Это тот же самый компилятор (например, сборник компилятора GNU). GCC или G ++ просто выбирают другой интерфейс с различными параметрами по умолчанию.

В двух словах: если вы используете g ++, внешний интерфейс скажет компоновщику, что вы можете связать с стандартными библиотеками C++. Интерфейс gcc не будет делать этого (также он может связываться с ними, если вы передадите правильные параметры командной строки).

8

Единственным заметным отличием является то, что я вам передать .c для GCC будет компилировать как С, в то время как г ++ всегда будет относиться к ней как C++

+4

(Позднее, но для потомков). Как указывали другие ответы, это ни в коем случае не является «единственной заметной разницей», если у читателя нет искаженного определения. – 2015-09-13 21:54:29

13

Хотя GCC и г ++ команды делают очень сходные вещи, г ++ разработан быть командой, которую вы вызываете для компиляции программы на C++; он предназначен, чтобы автоматически делать правильные вещи.

За кулисами они действительно являются одной и той же программой. Насколько я понимаю, оба решают, следует ли компилировать программу как C или C++ на основе расширения имени файла. Оба могут связываться с стандартной библиотекой C++, но только g ++ делает это по умолчанию. Так что если у вас есть программа, написанная на C++, которая не нуждается в ссылке на стандартную библиотеку, gcc будет делать правильные вещи; но тогда, g ++. Поэтому нет никакой причины не использовать g ++ для общей разработки на C++.

334

GCC: GNU Compiler Collection

  • ссылающихся на всех различных языках, поддерживаемых компилятором GNU.

GCC: GNU C           Компилятор
г ++: GNU C++ Compiler

Основные отличия:

  1. НКУ будет компилировать.: * .c/* файлы CPP как C и C++ соответственно.
  2. g ++ скомпилирует: *.c/*. cpp, но все они будут рассматриваться как файлы C++.
  3. Также, если вы используете g ++ для связывания объектных файлов, он автоматически связывается в std-библиотеках C++ (gcc не делает этого).
  4. gcc компиляция файлов C имеет меньше предопределенных макросов.
  5. 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 
+28

Вы можете связать библиотеку std C++ в `gcc`, передав параметр` -lstdC++ `. – 2010-08-23 00:13:26

+13

Есть больше различий между 'gcc' и 'g ++', чем только стандартные библиотеки, поэтому `gcc -lstdC++` по-прежнему не будет получать то же поведение, что и `g ++`. Мы поместили все это специфическое для языка поведение в свой собственный драйвер по какой-то причине, вот для чего он и есть. :-) – 2013-01-28 21:03:33

9

«GCC» является общим термином стенография для GNU Compiler Collection. Это и самое общее имя для компилятора, и имя, используемое, когда акцент делается на компиляции программ на C (как сокращенное ранее выражение для «компилятора GNU C»).

При обращении к компиляции C++ обычно вызывается компилятор «G ++». Поскольку существует только один компилятор, его также можно назвать «GCC» независимо от языкового контекста; однако термин «G ++» более полезен, когда акцент делается на компиляции программ на C++.

Вы можете прочитать больше here.

0

gcc и g ++ - оба компилятора GNU. Они компилируют c и C++. Разница заключается в * .c файлах gcc рассматривает его как программу c, а g ++ рассматривает его как программу на C++. * .cpp-файлы считаются C++-программами. C++ - это супер-набор c, а синтаксис более строгий, поэтому будьте осторожны с суффиксом.

10

я заинтересовался вопросом и выполнить некоторые эксперименты

  1. Я обнаружил, что описание here, но это очень мало.

  2. Затем я попытался экспериментировать с 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 
    
  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 
    
  4. Но когда я пытаюсь запустить «гну коллекцию составителя» инструмент в этой моде:

    $ 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] 
    
  5. Но это одна до сих пор работают без ошибок

    $ gcc -x c++ -std=c++98 test_cpp.c 
    
  6. И это также

    $ 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; 
} 

Выводы:

  1. Если посмотреть на дереве процессов, то кажется, что GCC, и г ++ является бэкенд с другими инструментами, которые в моей среде являются: cc1plus.exe, cc1.exe, collect2.exe, as.exe, ld.exe

  2. НКУ работает отлично, как metatool для если у вас есть правильное расширение или установить правильные -std -x флаги. См this

9

В чем разница между 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++.

0

Я тестировал 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++ - лучший вариант.

Смежные вопросы