Створення програми

 

Розробка програми починається зі створення вихідних файлів, що містять текст мовою Си. Текстові файли виробляються за допомогою одного з текстових редакторів, підтримуваних у середовищі UNIX.

Хоча UNIX-Файли не мають розширень, задаємо створеному файлу розширення для того, щоб його міг розпізнати компілятор.

.c для мови С и .сс (або .С) для З++.

Програма може включати файли заголовків. Для цього використовується директива #include <ім'я заголовка>

Наприклад,

#include <fcntl.h>

При цьому якщо ім'я файлу укладене в уголковые дужки, це означає, що пошук файлу буде вироблятися в загальноприйнятих каталогах зберігання файлів заголовків. Якщо ж ім'я файлу заголовка укладено в лапки, то використовується явно зазначене або відносне ім'я файлу.

 

Таблиця 1

Зміст основних заголовних файлів

Файл заголовка Призначення
<assert.h> Містить прототип функції assert, що використовується для діагностики
<cpio.h> Містить визначеннящо використовується для файлових архівів cpio
<ctype.h> Містить визначення символьних типів, а також прототипи функцій класів символів
<dirent.h> Містить визначення структур даних каталогу, а також фунцій для роботи з каталогами
<errno.h> Містить визначення кодів помилок
<fcntl.h> Містять прототипи системних викликів fcntl, open, creat, а також визначення констант і структур даних, необхідних при роботі з файлами
<float.h> Містить визначення констант, необхідних для операцій із плаваючою крапкою
<ftw.h> Містять прототипи функцій, що використовується для сканування дерева файлової системи, а також визначення використовуваних констант

 

 

Продовження таблиці 1

Файл заголовка Призначення
<grp.h> Містять прототипи функцій і визначення структур даних, що використовуються для роботи з групами користувачів
<langinfo.h> Містить визначення мовних констант дня тижня, назва місяця, а також прототип функції langinfo()
<limits.h> Містить визначення констант, що визначають значення обмежень для даної реалізації
<locale.h> Містить визначення констант, що використовується для створення користувальницького середовища, що залежить від мовних і культурних традицій
<math.h> Містить визначення математичних констант
<nl_types.h> Містить визначення для каталогів повідомлень, а також прототипи функцій catopen і catclose
<pwd.h> Містить визначення структури файлу паролів, а також прототипи функцій для роботи з ним
<regex.h> Містить визначення констант і структур даних, що використовується у регулярних вираженнях, а також прототипи функцій для роботи з ними
<search.h> Містить визначення констант і структур даних, а також прототипи функцій, необхідних для пошуку
<setjmp.h> Містять прототипи функцій переходу, а також визначення пов'язаних з ними структур даних
<signal.h> Містить визначення констант і прототипи функцій, необхідних для роботи із сигналами
<stdarg.h> Містить визначення, необхідні для підтримки списків аргументів змінної довжини
<stddef.h> Містить стандартні визначення
<stdio.h> Містить визначення стандартної бібліотеки уведення-висновку
<stdlib.h> Містить визначення стандартної бібліотеки
<string.h> Містять прототипи функцій роботи з рядками
<tar.h> Містить визначення, що використовуються для файлових архівів
<termios.h> Містить визначення констант. Структур даних і прототипи функцій для термінального уведення-висновку

 

 

Продовження таблиці 1

Файл заголовка Призначення
<time.h> Містить визначення типів, констант і прототипи функцій для роботи із часом і датою, а також визначення, що ставляться до дат
<ulimit.h> Містить визначення констант і прототип системного виклику ulimit() для керування обмеженнями, що накладаються на процес
<unistd.h> Містить визначення системних символьних констант, а також прототипи більшості системних викликів
<utime.h> Містить визначення констант і прототип системного виклику utime для роботи з тимчасовими характеристиками файлу
<sys/ipc.h> Містить визначення, що ставляться до системи міжпроцесної взаємодії (IPC)
<sys/msg.h> Містить визначення, що ставляться до системи IPC (повідомлення)
<sys/resource.h> Містить визначення констант і прототипи системних викликів для керування розмірами ресурсів, доступних процесу
<sys/sem.h> Містить визначення, що ставляться до системи IPC (семафори)
<sys/shm.h> Містить визначення, що встановлюються до системи IPC(поділювана пам'ять)
<sys/stat.h> Містить визначення структур даних і прототипи системних викликів, необхідних для одержання інформації про файли
<sys/times.h> Містить визначення структур даних і прототип системного виклику times(), службовця для одержання статистики виконання процесу
<sys/types.h> Містить визначення примітивів системних даних
<sys/utsname.h> Містить визначення прототип системного виклику uname(), що використовується для одержання імен системи
<sys/wait.h> Містить визначення констант і прототипи системних викликів, що використовуються для синхронізації родинних процесів

 

При розробці програм, а тим більше - складних, використовується принцип модульности, розбивки складної програми на складові частини, кожна з яких може зберігатися в окремому файлі й підготовлятися окремо.

В операційній системі Linux для компіляції програм написаних мовою C\C++ використовується компілятор GNU C\C++.

Найбільш популярними компіляторами для мови Си в середовищі ОС UNIX зараз є pcc (Ритчи й Томпсон) і gcc - GNU Compiler Collection - (Ричард Столлман).

Переваги gcc:

− вільно поширюється.

− gcc підтримується й супроводжується.

− відкритість вихідних текстів дозволяють додавати до gcc нового кодогенераторы.

 

Більшість сучасних систем Unix поставляються із уже встановленими компіляторами.

 

Опції gcc:

Докладно про gcc можна довідатися, виконавши команду

info gcc

 

Найбільше часто вживаються наступні:

Таблиця 2

Оція Призначення
-c Тільки компіляція. З вихідних файлів програми створюються об'єктні файли у вигляді name.o. Компонування не виробляється.
-o file-name Використовувати file-name як ім'я для створюваного gcc файлу (звичайно це файл, що виконується,).
-llibrary-name Використовувати при компонуванні зазначену бібліотеку.
-v Довідатися версію пакета gcc, що зараз використовується
-g Генерує код для налагодження із символьним отладчиком sdb(1). Зауваження: при використанні опції -g таблиця символів не віддаляється.
-O Викликає оптимізатор об'єктного коду, що зменшує розмір і збільшує швидкість програми за допомогою переміщення, об'єднання й видалення коду.

Продовження таблиці 2

Оція Призначення
-S Не викликає асемблер. Залишає результат у файлі з расширением.s. Цей файл буде містити команди мови асемблера, "рідного" для цільового комп'ютера.

 

Компіляція одного модуля:

У найпростішому випадку відкомпілювати програму можна, запускаючи компілятор командою

gcc ім'я_вихідного_файлу

 

Якщо програма була написана без помилок, то компілятор створить виконується файл, що, з ім'ям a.out. Змінити ім'я створюваного файлу, що виконується, можна, задавши його за допомогою опції -o:

gcc ім'я_вихідного_файлу -o ім'я_ щовиконується_файлу

 

Наприклад,

Gcc file.c -o file.exe або gcc -o file file.c

 

Запустити на виконання з поточного каталогу можна так:

./file

 

Щоб відкомпілювати вихідний код, що перебуває у файлі F.cc, і створити об'єктний файл F.o, виконаєте команду:

gcc -c <compile-options> F.c

 

Тут рядок compile-options указує можливі додаткові опції компіляції.