В чем разница между gcc и g ++ / gcc-c ++?

Используйте переключатель/K. Например

cmd /K "cd /d c:\WINDOWS\"

создаст cmd окно в каталоге

C:\Windows
28
задан gdb 2 May 2011 в 05:16
поделиться

1 ответ

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

g++ автоматически включает библиотеку C ++; по умолчанию он также будет компилировать файлы с расширениями, которые указывают, что они являются источником C как C ++, а не как C.

Из http://gcc.gnu.org/onlinedocs/gcc/Invoking-G_002b_002b.html#Invoking-G_002b_002b :

исходные файлы C ++ традиционно используют один из суффиксы .C, .cc, .cpp, .CPP, .c++, .cp или .cxx; Заголовочные файлы C ++ часто используют .hh, .hpp, .H или (для общего кода шаблона) .tcc; и предварительно обработанные файлы C ++ используют суффикс .ii. GCC распознает файлы с этими именами и компилирует их как программы на C ++, даже если вы вызываете компилятор так же, как и для компиляции программ на C (обычно с именем gcc).

Однако использование gcc не добавляет библиотеку C ++. g ++ - это программа, которая вызывает GCC и обрабатывает файлы .c, .h и .i как исходные файлы C ++ вместо исходных файлов C, если не используется -x, и автоматически указывает связь с библиотекой C ++. Эта программа также полезна при предварительной компиляции заголовочного файла C с расширением .h для использования в компиляциях C ++.

Например, чтобы скомпилировать простую программу на C ++, которая пишет в поток std::cout, я могу использовать любой (MinGW в Windows):

  • g ++ -o test.exe test .cpp
  • gcc -o test.exe test.cpp -lstdc ++

Но если я попробую:

  • gcc -o test.exe test. cpp

Я получаю неопределенные ссылки во время ссылки.

И для другого различия, следующая программа на C:

#include <stdlib.h>
#include <stdio.h>

int main() 
{
    int* new;
    int* p = malloc(sizeof(int));

    *p = 42;
    new = p;

    printf("The answer: %d\n", *new);

    return 0;
}

компилируется и работает нормально, используя:

  • gcc -o test.exe test.c

Но выдает несколько ошибок при компиляции с использованием:

  • g ++ -o test.exe test.c

Ошибки:

test.c: In function 'int main()':
test.c:6:10: error: expected unqualified-id before 'new'
test.c:6:10: error: expected initializer before 'new'
test.c:7:32: error: invalid conversion from 'void*' to 'int*'
test.c:10:9: error: expected type-specifier before '=' token
test.c:10:11: error: lvalue required as left operand of assignment
test.c:12:36: error: expected type-specifier before ')' token
55
ответ дан 28 November 2019 в 03:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: