Хрестоматия по программированию на Си в Unix


Простые программы и алгоритмы. Сюрпризы, советы. Хрестоматия по программированию на Си в Unix - стр. 8


$HOME/include

где $HOME - ваш домашний каталог. Хорошее место для общих include-файлов - каталог

/usr/local/include

Как сказать компилятору, что #include "" файлы надо брать из определенного места, а не из текущего каталога? Это делает ключ компилятора

cc -Iимя_каталога ...

Например:

/* Файл x.c */ #include "x.h" int main(int ac, char *av[]){ .... return 0; }

И файл x.h находится в каталоге /home/abs/include/x.h (/home/abs - мой домашний каталог). Запуск программы на компиляцию выглядит так:

cc -I/home/abs/include -O x.c -o x

или

cc -I$HOME/include -O x.c -o x

Или, если моя программа x.c находится в /home/abs/progs

cc -I../include -O x.c -o x

Ключ -O задает вызов компилятора с оптимизацией.

Ключ -I оказывает влияние и на #include <> директивы тоже. Для ОС Solaris на машинах Sun программы для оконной системы X Window System содержат строки вроде

#include <X11/Xlib.h>

#include <X11/Xutil.h>

На Sun эти файлы находятся не в /usr/include/X11, а в /usr/openwin/include/X11. Поэтому запуск на компиляцию оконных программ на Sun выглядит так:

cc -O -I/usr/openwin/include xprogram.c \ -o xprogram -L/usr/openwin/lib -lX11

где -lX11 задает подключение графической оконной библиотеки Xlib.

Если include-файлы находятся во многих каталогах, то можно задать поиск в нескольких каталогах, к примеру:

cc -I/usr/openwin/include -I/usr/local/include -I$HOME/include ...

* На самом деле, для "склейки" объектных файлов в выполняемую программу, команда /bin/cc вызывает программу /bin/ld - link editor, linker, редактор связей, компоновщик.

** Поэтому библиотека может быть очень большой, а к нашей программе "приклеится" лишь небольшое число файлов из нее. В связи с этим стремятся делать файлы, помещаемые в библиотеку, как можно меньше: 1 функция; либо "пачка" функций, вызывающих друг друга.

*** Обратите внимание, что библиотечные функции не являются частью ЯЗЫКА Си как такового. То, что в других языках (PL/1, Algol-68, Pascal) является частью языка (встроено в язык)- в Си вынесено на уровень библиотек. Например, в Си нет оператора

вывода; функция вывода printf - это библиотечная функция (хотя и общепринятая). Таким образом мощь языка Си состоит именно в том, что он позволяет использовать функции, написанные другими программистами и даже на других языках, т.е. является функционально расширяемым.

© Copyright А. Богатырев, 1992-95
Си в UNIX

| |




- Начало -  - Назад -  



Книжный магазин