Вызов GCC как “cc” по сравнению с “gcc”

TDD на самом деле нигде еще не является «нормальным» подходом, так как он все еще относительно новый и еще не получил универсального понимания или принятия. Это не значит, что некоторые магазины теперь не работают таким образом, но я все еще удивлен, когда слышу, что кто-то вообще использует его в этот момент.

67
задан Peter Mortensen 18 January 2012 в 22:59
поделиться

7 ответов

Для усмешки я только что проследил, как argv [0] используется изнутри gcc ( main .c -> top_lev.c -> opts.c -> langhooks.c ) и оказывается, что argv [0] в настоящее время используется только для того, чтобы дать malloc что-то сообщить в случае сбоя. Нет

35
ответ дан 24 November 2019 в 14:43
поделиться

Ничто в документации GCC не указывает на то, что GCC будет вести себя иначе, если имя его исполняемого файла не gcc , а cc . Компилятор GNU Fortran даже упоминает, что :

Версия команды gcc (которая также может быть установлена ​​как системная команда cc)

2
ответ дан 24 November 2019 в 14:43
поделиться

cc - это просто способ вызова компилятора UNIX, он будет работать на всех Unix.

3
ответ дан 24 November 2019 в 14:43
поделиться

На моем Mac от man gcc :

В версии GCC от Apple и cc, и gcc на самом деле являются символическими ссылками на компилятор с именем gcc-version. Точно так же c ++ и g ++ являются ссылками на компилятор с именем g ++ - version.

На основании этого я предполагаю, что cc и gcc ведут себя одинаково.

12
ответ дан 24 November 2019 в 14:43
поделиться

It looks to me that cc (link to some old SUS specification) is intended to be the vendor-neutral interface to the system's compiler. It's marked as legacy:

The c89 utility provides an interface to the ISO C standard, but the cc utility accepts an unspecified dialect of the C language: it may be Standard C, common-usage C or some other variant. Portable C programs should be written to conform to the ISO C standard and compiled with c89.

POSIX has a utility called c99 which I believe is the successor of c89. It says

The c99 utility is based on the c89 utility originally introduced in the ISO POSIX-2:1993 standard. Некоторые из изменений по сравнению с c89 включают изменение содержимого раздела стандартных библиотек для учета новых заголовков и параметров; например, добавлен к операнду -l rt, и операнд трассировки -l добавлен для функций трассировки.

Я не очень хорошо знаком со всеми этими различными стандартами, но он выглядит как более свежий SUSv3 ( POSIX: 2004 ) и еще более свежий POSIX: 2008 (похоже, еще не имеет номера SUS) больше не определяют утилиту с именем cc , а только утилита под названием c99 . Между прочим, моя система Linux ( Arch_Linux ) содержит справочную страницу c99 , но не c89 , а содержит только утилиту с именем cc , но ни c89 , ни c99 . Там много путаницы:

14
ответ дан 24 November 2019 в 14:43
поделиться

Учитывая, что это исходит из UNIX, я бы сказал, что «cc» - это общее имя, а «gcc» - это фактический компилятор. т.е. "gcc" предоставляет "cc", поэтому программа, ищущая "cc", найдет и использует "cc", блаженно игнорируя фактический используемый компилятор.

Кроме того,

1
ответ дан 24 November 2019 в 14:43
поделиться

Сегодня у меня было такое же сомнение, и я попытался найти его самостоятельно:

$ which cc
 /usr/bin/ccc

$file /usr/bin/cc
 /usr/bin/cc: symbolic link to '/etc/alternatives/cc'

$file /etc/alternatives/cc
 /etc/alternatives/cc: symbolic link to '/usr/bin/gcc'

$which gcc
 /usr/bin/gcc

Итак, в основном cc указывает на gcc .

Вы также можете проверить с помощью cc -v и gcc -v . Если они распечатывают одно и то же, это означает, что они абсолютно одинаковые.

8
ответ дан 24 November 2019 в 14:43
поделиться
Другие вопросы по тегам:

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