Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Директиви препроцесора.

Мета роботи: отимати вміння та практичні навички використання основних директив препроцесора в програмах мовою С.

 

Теоретична частина

Препроцесор мови С

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

 

# define # undef # include # if # ifdef # ifndef # else # elif # endif # line   # error # pragma # Визначення макросу Скасування визначення макросу Включення об'єкта-заголовка Компіляція, якщо вираз істинний Компіляція, якщо макрос хибний Компіляція, якщо макрос не визначений Компіляція, якщо вираз в if не дійсний Складена директива else/if Закінчення групи компіляції за умовою Заміна новим значенням номера рядка або імені вихідного файлу Форматування помилок трансляції Дія визначається реалізацією Null - директива
Операції Призначення
# ## defined Додання операнду форми рядка символів Склеювання лексем Представлення # ifdef у форма виразу

Всі директиви препроцесора починаються із символу #.

Д иректива #Define

Директива #define вводить макровизначення або макрос. Загальна форма директиви наступна:

#define ім'я_макросу послідовність_символів.

Послідовність_символів називають ще рядком заміщення. Коли препроцесор знаходить у вихідному тексті програми ім'я_макросу (надалі будемо говорити просто макрос), він заміняє його на послідовність_ символів. Будь-які входження макросу, виявлені в рядках символів, символьних константах або в коментарях, заміні не підлягають.

Можна скасувати визначення макросу директивою #undef:

#undef ім'я_макросу

Даний рядок видаляє кожний раніше введений рядок заміщення. Визначення макросу губиться і ім'я_макросу стає невизначеним.

Приклад:

#define МАХ 100

Це значення буде підставлятися щораз замість макросу МАХ у вихідному файлі. Можна також використовувати макрос замість строкової константи:

Якщо послідовність символів у директиві #define не міститься в одному рядку, то можна поставити наприкінці рядка символ \ і продовжувати послідовність на іншому рядку:

#define STRING "Ця послідовність символів не \ уміщається на одному рядку, ми використовуємо два рядки"

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

Найбільше часто директива #define використовується для визначення імен "магічних чисел", що зустрічаються в програмі. Наприклад, якщо ви задаєте один розмір масивів у програмі й у деяких підпрограмах використовуєте масиви того ж розміру, те більш доцільно визначити розмір масиву директивою #define і використовувати в оголошеннях масивів цей макрос.

Приклад:

#define МАХ 100

float bа1аnсе[МАХ], sа1dо[МАХ]:

Директива #define має ще одну важливу особливість: макрос може мати аргументи. Щоразу, коли відбувається заміна, аргументи також заміняються на ті, котрі зустрічаються в програмі. Ілюстрацією може служити наступний приклад:

#define МIМ(а,b) ((а)<(b))?(а):(Ь)

printf(" Мінімум із х та у %d, МІN(х,у));

printf(“ Мінімум із а та b %d, МІN(m,n));

Коли програма буде компілюватися, у вираз, визначений як МІN(а, b), будуть підставлені відповідно х та у або m та n. Аргументи а та b в круглих дужках, тому що замість них може підставлятися деякий вираз, а не просто ідентифікатори, наприклад

printf(“Мінімум %d, МІN(х*х, х*х*х));


Дата добавления: 2015-07-20; просмотров: 71 | Нарушение авторских прав


Читайте в этой же книге: ВАРІАНТИ ЗАВДАНЬ РОБОТИ | Обмінне сортування | Інші методи сортування | ВАРІАНТИ ЗАВДАНЬ РОБОТИ | ТЕОРЕТИЧНА ЧАСТИНА | У двовимірні та навпаки | ВАРІАНТИ ЗАВДАНЬ РОБОТИ | Зв’язок між покажчиками та масивами | Покажчики на багатовимірні масиви. | Масиви покажчиків |
<== предыдущая страница | следующая страница ==>
ЗАВДАННЯ ПО ОБРОБЦІ РЯДКІВ| If, #else, #elif, #endif.

mybiblioteka.su - 2015-2024 год. (0.007 сек.)