TDD на самом деле нигде еще не является «нормальным» подходом, так как он все еще относительно новый и еще не получил универсального понимания или принятия. Это не значит, что некоторые магазины теперь не работают таким образом, но я все еще удивлен, когда слышу, что кто-то вообще использует его в этот момент.
Для усмешки я только что проследил, как argv [0]
используется изнутри gcc ( main .c
-> top_lev.c
-> opts.c
-> langhooks.c
) и оказывается, что argv [0]
в настоящее время используется только для того, чтобы дать malloc
что-то сообщить в случае сбоя. Нет
Ничто в документации GCC не указывает на то, что GCC будет вести себя иначе, если имя его исполняемого файла не gcc , а cc . Компилятор GNU Fortran даже упоминает, что :
Версия команды gcc (которая также может быть установлена как системная команда cc)
cc - это просто способ вызова компилятора UNIX, он будет работать на всех Unix.
На моем Mac от man gcc
:
В версии GCC от Apple и cc, и gcc на самом деле являются символическими ссылками на компилятор с именем gcc-version. Точно так же c ++ и g ++ являются ссылками на компилятор с именем g ++ - version.
На основании этого я предполагаю, что cc и gcc ведут себя одинаково.
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
. Там много путаницы:
Учитывая, что это исходит из UNIX, я бы сказал, что «cc» - это общее имя, а «gcc» - это фактический компилятор. т.е. "gcc" предоставляет "cc", поэтому программа, ищущая "cc", найдет и использует "cc", блаженно игнорируя фактический используемый компилятор.
Кроме того,
Сегодня у меня было такое же сомнение, и я попытался найти его самостоятельно:
$ 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
. Если они распечатывают одно и то же, это означает, что они абсолютно одинаковые.