Створення програми
Розробка програми починається зі створення вихідних файлів, що містять текст мовою Си. Текстові файли виробляються за допомогою одного з текстових редакторів, підтримуваних у середовищі 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 указує можливі додаткові опції компіляції.