Jaka jest różnica między g++ a gcc?

Jaka jest różnica między g++ a gcc? Które z nich powinny być używane do ogólnego rozwoju c++?

 687
Author: JamesFromIT, 2008-10-06

10 answers

gcc i g++ są sterownikami kompilatora 'Gnu Compiler Collection ' (który był kiedyś tylko ' Gnu C Compiler ').

Mimo że automatycznie ustalają, które backendy (cc1 cc1plus ...) wywołanie w zależności od typu pliku, chyba że jest nadpisane przez -x language, mają pewne różnice.

Prawdopodobnie najważniejszą różnicą w ich domyślnych ustawieniach jest to, z którymi bibliotekami łączą się automatycznie.

Według GCC online dokumentacja opcje łącza i Jak wywoływany jest g++ , g++ jest odpowiednikiem gcc -xc++ -lstdc++ -shared-libgcc (1. jest opcją kompilatora, 2. dwie są opcjami linkera). Można to sprawdzić uruchamiając oba z opcją -v (wyświetla uruchamiane polecenia backend toolchain).

 579
Author: rbaleksandar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-14 08:18:58

GCC: GNU Compiler Collection

  • Referrery do wszystkich róşnych jÄ ™ zykĂłw obsĹ ' ugiwanych przez kompilator GNU.

Gcc: kompilator GNU C
g++: kompilator GNU C++

Główne różnice:

  1. gcc skompiluje:*.c/*.pliki cpp jako odpowiednio C i C++.
  2. g++ skompiluje:*.c/*.pliki cpp, ale wszystkie będą traktowane jako pliki C++.
  3. również jeśli używasz g++ do łączenia plików obiektowych, automatycznie łączy się w biblioteki std C++ (gcc tego nie robi).
  4. GCC kompilowanie plików C ma mniej predefiniowanych makr.
  5. kompilowanie gcc *.kompilacji cpp i G++*.c/*.pliki cpp mają kilka dodatkowych makr.

Dodatkowe makra podczas kompilacji*.pliki cpp:

#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern
 363
Author: Martin York,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-15 19:14:27

W c++ powinieneś używać g++.

To ten sam kompilator (np. GNU compiler collection). GCC lub g++ po prostu wybierz inny front-end z różnymi domyślnymi opcjami.

W skrócie: jeśli używasz g++, frontend powie linkerowi, że możesz chcieć połączyć się z bibliotekami standardowymi C++. Interfejs GCC tego nie zrobi (również może się z nimi połączyć, jeśli podasz odpowiednie opcje wiersza poleceń).

 64
Author: Nils Pipenbrinck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-05 20:29:26

Jaka jest różnica między g++ a gcc?

gcc rozwinął się z jednego języka "GNU C Compiler" do wielojęzycznego "GNU Compiler Collection". Termin "kompilator GNU C" jest nadal używany czasami w kontekście programowania w języku C.

The g++ jest kompilatorem C++ dla GNU Compiler Collection. Podobnie jak gnat jest kompilatorem Ada dla gcc. zobacz użycie GNU Compiler Collection (GCC)

Na przykład, Ubuntu 16.04 i 18.04 man g++ zwraca stronę podręcznika GCC(1).

Ubuntu 16.04 i 18.04 man gcc stwierdza, że ...

g++ akceptuje głównie te same opcje co gcc

I że domyślne ...

... użycie gcc nie dodaje biblioteki C++. g++ jest programem który wywołuje GCC i automatycznie określa połączenie z C++ biblioteka. Leczy .c, .h i .i pliki jako pliki źródłowe C++ zamiast Pliki źródłowe C, chyba że-x jest używany. Ten program jest również przydatny, gdy precompilowanie pliku nagłówkowego C za pomocą a .rozszerzenie h do użytku w C++ Kompilacje.

Przeszukaj strony podręcznika gcc w poszukiwaniu szczegółowych informacji na temat wariancji opcji gcc i g++.

Który z nich powinien być używany do ogólnego rozwoju c++?

Technicznie, albo gcc lub g++ mogą być używane do ogólnego rozwoju C++ z odpowiednimi ustawieniami opcji. Jednak domyślne zachowanie {[0] } jest naturalnie wyrównane do rozwój C++.

Na stronie podręcznika Ubuntu 18.04 dodano Następujący akapit:

Zwyczajowym sposobem uruchomienia GCC jest uruchomienie pliku wykonywalnego o nazwie gcc, lub machine-gcc podczas kompilacji krzyżowej, lub machine-gcc-version, aby uruchomić określoną wersję GCC. podczas kompilacji programów C++, powinieneś wywołać GCC jako g++.

 17
Author: l --marc l,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-03 02:56:30

Chociaż polecenia gcc i g++ robią bardzo podobne rzeczy, g++ jest zaprojektowany tak, aby być poleceniem, które można wywołać do kompilacji programu C++; jest przeznaczony do automatycznego wykonywania właściwych rzeczy.

Za kulisami, to naprawdę ten sam program. Jak rozumiem, obie strony decydują, czy skompilować program w C czy w c++ na podstawie rozszerzenia nazwy pliku. Oba są zdolne do łączenia się z biblioteką standardową C++, ale domyślnie robi to tylko g++. Więc jeśli masz program napisany w C++ tak się składa, że nie trzeba linkować z biblioteką standardową, gcc zrobi to, co należy; ale wtedy, tak samo jak g++. Więc naprawdę nie ma powodu, aby nie używać g++ do ogólnego rozwoju C++.

 16
Author: zaphod,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-06 00:51:10

Zainteresowałem się tym zagadnieniem i przeprowadziłem kilka eksperymentów

  1. Znalazłem ten opis tutaj , ale jest bardzo krótki.

  2. Potem próbowałem eksperymentować z gcc.exe i G++.exe na moim komputerze z windows:

    $ 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. Próbowałem skompilować proste pliki testowe c89, c99 i c++1998 i działa dobrze dla mnie z poprawnymi rozszerzeniami pasującymi do języka

    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. Ale kiedy próbuję uruchomić " gnu compiler kolekcja " tool in that fashion:

    $ 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. Ale ten nadal działa bez błędów

    $ gcc -x c++ -std=c++98 test_cpp.c
    
  6. I to również

    $ g++ -std=c++0x test_cpp_11.cpp 
    

P. S. pliki testowe

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

Wyniki:

  1. Jeśli spojrzeć na drzewo procesów, to wydaje się, że gcc, a g++ jest backendem do innych narzędzi, które w moim środowisku są: cc1plus.exe, cc1.exe, collect2.exe, as.exe, ld.exe

  2. Gcc działa dobrze jako metatool Dla jeśli masz popraw rozszerzenie lub ustaw popraw - flagi std-X. Zobacz to

 10
Author: bruziuz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-02 16:54:44

" GCC " jest powszechnym skrótem dla GNU Compiler Collection. Jest to zarówno najbardziej ogólna nazwa kompilatora, jak i nazwa używana, gdy nacisk kładzie się na kompilowanie programów w języku C (jako skrót dawniej oznaczał "GNU C Compiler").

W odniesieniu do kompilacji C++, zwykle nazywa się kompilator " G++". Ponieważ istnieje tylko jeden kompilator, poprawne jest również nazywanie go " GCC "bez względu na kontekst języka; jednak termin "G++" jest bardziej przydatny, gdy nacisk jest na kompilacji programów C++.

Możesz przeczytać więcej tutaj .

 9
Author: Minh Triet Pham Tran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-15 14:11:38

Jedyną zauważalną różnicą jest to, że jeśli przekażesz .c do gcc, będzie on kompilowany jako C, podczas gdy g++ zawsze będzie traktował go jako C++.

 9
Author: njsf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-16 07:35:35

Testowałem gcc i G++ w systemie linux. Używając MAKEFILE, mogę zdefiniować compliler używany przez "GNU make". Testowałem z tak zwaną "pamięcią dynamiczną" funkcji lokalizującej "C plus plus" przez:

int main(){

int * myptr = new int;
* myptr = 1;
printf("myptr[0] is %i\n",*myptr);
return 0;
}

Tylko g++ może pomyślnie skompilować na moim komputerze, podczas gdy gcc zgłosi błąd

undefined reference to `operator new(unsigned long)'
Więc mój wniosek jest taki, że gcc Nie w pełni popiera "C plus plus". wydaje się, że wybór g++ dla plików źródłowych C++ jest lepszą opcją.
 1
Author: magicmax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-02 20:45:15

GCC i G ++ są kompilatorami GNU. Kompilują c i C++. Różnica dotyczy *.pliki c gcc traktuje go jako program c, A g++ widzi go jako program c++. *.pliki cpp są uważane za programy c ++. c++ jest super zestawem c i składnia jest bardziej rygorystyczna, więc uważaj na sufiks.

 0
Author: Marcus Thornton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-12 08:44:41