CC(1)

НАЗВАНИЕ
cc - компилятор языка C

СИНТАКСИС


  cc  [-c] [-p] [-g] [-O] [-L каталог] [-l библиотека]

  [-W фаза,арг1[,арг2 ...] [-S] [-E] [-P] [-H] [-D имя] [-U имя]

  [-I каталог] [-B цепочка_символов] [-t [p012al]] [-w] [-#]

  файл ...

ОПИСАНИЕ
Команда cc является командой вызова компилятора языка C, который генерирует ассемблерные инструкции. Команда cc принимает аргументы следующих типов:

Аргументы, оканчивающиеся на .c, интерпретируются как имена файлов, содержащих исходные тексты на языке C; они компилируются, и каждый об ектный модуль помещается в файл с именем, которое образуется из имени исходного файла замещением расширения .c на .o. Однако об ектный .o-файл обычно удаляется, если компилируется и одновременно загружается программа, состоящая из одного модуля. Аналогично, аргументы, оканчивающиеся на .s, интерпретируются как имена файлов, содержащих исходные тексты на языке ассемблера, и ассемблируются с образованием об ектных .o-файлов.

Командой cc интерпретируются следующие опции [см. также опции редактора связей ld(1) и ассемблера as(1)]:

-cОтменить фазу редактирования связей и создавать об'ектный файл даже в случае программы, состоящей только из одного модуля.
-pСгенерировать дополнительные команды для подсчета числа обращений к каждой функции. Кроме того, если имеет место фаза редактирования связей, стандартная подпрограмма инициализации заменяется на такую, которая автоматически вызывает функцию monitor(3C) и обеспечивает запись файла mount.out при нормальном завершении об'ектной программы. Профиль выполнения программы может быть затем получен при помощи команды prof(1).
-gСгенерировать дополнительную информацию для отладчика sdb(1).
Включить оптимизацию об ектного кода.
-L каталог Дополнить каталогом список каталогов, которые содержат об ектные библиотечные модули [для редактирования связей посредством ld(1)].
-l библиотека Скомпоновать с об ектной библиотекой [для ld(1)].
-W фаза,арг1[,арг2 ...] Передать аргумент(ы) заданной фазе компиляции, где фаза - это один из символов [p012al], которые обозначают, соответственно, препроцессор, первый проход компилятора, второй проход компилятора, оптимизатор, ассемблер, редактор связей. Например, по опции -W,a,-m перед вызовом ассемблера будет вызван макропрепроцессор m4(1). Такая опция имеет смысл для файлов, содержащих ассемблерные вставки.
-SСкомпилировать указанные C-программы и поместить результат на языке ассемблера в соответствующие файлы с расширением .s (в этом случае об ектные модули не создаются).
-EУказанные C-программы обработать только препроцессором cpp(1) и результат направить на стандартный вывод.
-PУказанные C-программы обработать только препроцессором cpp(1) и результат поместить в соответствующие файлы с расширением .i.
-HВыдать в стандартный протокол составные имена всех участвующих в компиляции включаемых файлов.
-D имя Определить имя для препроцессора. Этот механизм используется в условных директивах препроцессора, так как позволяет определять имена за пределами исходного текста.
-U имя Сделать имя неопределенным для препроцессора.
-I каталог Изменить алгоритм поиска включаемых (посредством директивы #include) файлов, имена которых не начинаются с символа /, а именно: сначала искать в указанном каталоге, а затем уже в каталогах стандартного списка. Так, включаемые файлы, чьи имена заданы в двойных кавычках, сначала ищутся в каталоге, содержащем файл, затем в каталогах, указанных с помощью опции -I, а затем уже в каталогах стандартного списка. Включаемые файлы, чьи имена заданы в угловых скобках, не ищутся в каталоге, содержащем файл.
-B цепочка_символов Получать составные имена программ, заменяющих препроцессор, компилятор, ассемблер и редактор связей, путем конкатенации цепочки_символов с окончаниями cpp, c0, c1, optim, as и ld. Если цепочка_символов пуста, она трактуется как /lib/o.
-t [p012al] В файлах, имена которых заданы с помощью опции -B, искать только требуемые компилятор, оптимизатор, ассемблер и редактор связей. Если отсутствует опция -B, то цепочка_символов берется равной /lib/n. Указание опции -t "" эквивалентно -t p012.
-wПодавить все предупреждающие сообщения.
-#Внутренний флаг отладки; выдавать название каждой выполняемой фазы компиляции. Если флаг задан дважды, то фазы не выполняются, а только распечатываются их названия.

Остальные аргументы рассматриваются как опции редактора связей, имена об ектных модулей, совместимых с C-программами (обычно эти модули получены в результате предшествующих запусков компилятора), или, возможно, библиотек C-совместимых программ. Эти программы, вместе с результатами текущей компиляции, обрабатываются редактором связей, и созданная выполняемая программа, если не указана опция редактора связей -o, помещается в файл a.out.

С появлением версии 5 операционной системы UNIX стандарт языка C был расширен. Теперь имена переменных могут иметь произвольную длину. Этот стандарт поддерживается на компьютерах семейства M68000. Опция -T заставляет компилятор обрезать длинные имена для обеспечения совместимости с более ранними версиями.

ОКРУЖЕНИЕ

SHLIB
Если SHLIB имеет значение YES, будет использоваться разделяемая версия библиотеки libc.
STACKCHECK
Если STACKCHECK имеет значение ON, порождаются команды для контроля стека.
DBLALIGN
Если DBLALIGN имеет значение YES, переменные размещаются с границы 32-битного слова, иначе - с границы 16-битного слова.
STALIGN
Если и STALIGN, и DBLALIGN имеют значение YES, то компоненты структур будут размещаться с границы 32-битного слова (по умолчанию, с границы 16-битного слова).
FP
Если переменная FP имеет значение M68881, компилятор генерирует инструкции для сопроцессора MC68881, поддерживающего арифметику вещественных чисел. Если результат какой-либо функции является вещественным, он возвращается только в регистре %fp0. Если переменная FP равна M68881u, вещественные значения возвращаются еще и в регистрах %d0/ %d1 для совместимости со старыми библиотеками.

Компилятор выбирает соответствующие версии библиотек libc и libm согласно значениям переменных окружения FP и SHLIB.

ФАЙЛЫ


файл.c            Исходный файл.

файл.o            Об ектный файл.

файл.s            Ассемблерный файл.

a.out             Результат работы редактора связей.

/usr/tmp/ctm*     Временные файлы.

/lib/cpp          Препроцессор.

/lib/c[01]        Две фазы компиляции.

/lib/optim        Оптимизатор.

/bin/as           Ассемблер as(1).

/bin/ld           Редактор связей ld(1).

/lib/crt1.o

/lib/crtn.o       Стандартная программа инициализации.

/lib/mcrt0.o      Программа  инициализации профилирования.

/lib/libc.a       Стандартная библиотека, см. раздел 3.

/lib/libm.a       Математическая библиотека, см. раздел 3.

/lib/lib*_s.a     Разделяемые версии библиотек.

/lib/lib*881.a    Версии   библиотек  для  сопроцессора

                   арифметики вещественных чисел.

/lib/lib*881u.a   Универсальные версии библиотек.

/usr/lib/libp/*.a Версии библиотек для профилирования.

СМ. ТАКЖЕ
as(1), cpp(1), ld(1), prof(1), sdb(1).

ДИАГНОСТИКА
Диагностика, вырабатываемая компилятором языка C, может быть иногда не очень ясной. Некоторые сообщения могут быть выданы ассемблером или редактором связей.

ПРЕДОСТЕРЕЖЕНИЯ
По умолчанию значение, возвращаемое из C-программы, является абсолютно случайным. Есть только два способа возвратить определенное значение - явно воспользоваться системным вызовом exit [см. exit(2)] или выйти из функции main( ) с помощью конструкции return выражение.