Вступ до допроцесорних директив на С

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

Препроцесор має спеціальний тип подання для його ідентифікації, як і будь-яка директива препроцесора ініціює себе спеціальним символом "#", а потім ідентифікатором, а потім іменем директиви. Пробіл також дозволений до і після #. Наприклад, # include.

Є певні пристосування або засоби, які може забезпечити попередній процесор C:

  • Файли заголовків: Включення файлів заголовків - це спосіб, коли декларації можуть бути замінені синтаксисом програми та тілом програми.
  • Розширення макросу: Визначення макросів - це як скорочення фрагмента коду, який препроцесор C замінює макроси їх відповідним визначенням протягом усього часу.
  • Компіляція за умовами: За різними сценаріями або різними умовами включення певних частин програми можливо шляхом умовного складання.
  • Контроль рядків: Якщо ви використовуєте програму для комбінування або переупорядкування когось або декількох вихідних файлів у проміжний файл для компіляції, ви можете використовувати керування рядками, щоб повідомити компілятору звідки походить кожен рядок.

Типи директив пропроцесорів

Усі типи директив щодо переробних процесів такі:

  1. # визначити
  2. # включати
  3. # ifdef
  4. # undef
  5. #ifndef
  6. # якщо
  7. #else
  8. #elif
  9. #endif
  10. # помилка
  11. #прагма

1. #define (Макроси)

Макрос - фрагмент коду, який замінюється деяким значенням коду макросу. Будь-який макрос переважно описується та визначається його директивою #define.

Синтаксис:

#define token value

Існує два типи макросів:

  • Функція - як макроси
  • Об'єкт - як макроси
Функція - як макроси

Функція like-macro працює майже як виклик функції.

Наприклад:

#define MAX(a, b) ((a)>(b) ? (a): (b))

MAX тут - ім'я Макрос.

Приклад:

Вихід:

Об'єкт - як макроси

Об'єктно-подібні макроси - це тип ідентифікатора, замінений значенням. В основному використовується для представлення числових констант.

#define PI 3.1415

Тут значення PI буде замінено макросом.


Вихід:

2. #включити

Існує деяка інша функціональність для директиви include препроцесора. У нього є три варіанти, які замінюють код поточним вихідним файлом.

Три варіанти такі:

  • #включати
  • #include "файл"
  • Включіть все інше

#включати

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

#include "файл"

Цей тип використовується для власних налаштованих файлів заголовків програми. Здійснюється пошук файлу з іменем файлу спочатку в поточному каталозі, після чого - файли заголовків системи та поточні каталоги поточного файлу каталогу.

#включати що-небудь

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

3. #Ifdef

Перевіряє, чи макрос визначений # define чи ні. Якщо так, він виконає код, інакше не буде.

Синтаксис:

#ifdef MACRO
(
Code body
)
#endif
#undef:

Для скасування визначення макросу означає, що воно не визначене та передує директиві #undef.

Синтаксис:

#undef token

Вихід:

4. Іфендеф

Цей процесор перевіряє, чи визначається #define #define чи ні. Якщо так, він виконує код.

Синтаксис:

#Ifndef MACRO
//code
#endif
#If

Цей процесор працює як цикл if, він оцінює вираз або умову. Якщо умова id true, він виконує код інакше ні.

Синтаксис:

#if expression
//code
#endif
#else

Директива препроцесора #else використовується для оцінки виразу або умови, якщо умова #if хибна. Його можна використовувати з директивами #if, #elif, #ifdef та #ifndef.

Синтаксис:

#if expression
//if body
#else
//else body
#endif

Приклад:

Вихід:

5. # Помилка

Як видно з назви, директива попереднього процесора помилок використовується для вказівки на помилку, і тоді компілятор видає фатальну помилку, якщо знайдено директиву про помилку і пропускає наступні етапи компіляції.

Вихід:

6. #прагма

Це залежить від компілятора, оскільки різні ОС і різні машини забезпечують всі типи функцій операційної системи, які використовується компілятором для надання додаткової інформації компілятору.

Синтаксис:

#pragma token

Приклад:

Вихід:

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

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

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

Висновок

Вихід з C Preprocessor дуже схожий на вхід, за винятком того, що всі директиви попередньої обробки були замінені порожніми рядками або пробілами. Різні файли та формати мають різні синтаксиси, що говорять про те, що початок нового файлу зроблено або вказує на повернення до файлу чи обробку, слід виконати перед компіляцією.

Усі сценарії використовуються для того, щоб іншим було відомо про потужність препроцесора C та про те, як він розвивається в різних версіях компілятора, розпочатих із стандартів GCC та ANSI.

Рекомендовані статті

Це посібник з Директив про препроцесори в C. Тут ми обговорюємо типи директив препроцесорів із синтаксисом та прикладами. Ви також можете переглянути наступні статті, щоб дізнатися більше -

  1. Зворотне число в С
  2. Сортування в С
  3. Функція хешування в С
  4. Продовжуйте заяву в С
  5. Сортування в C #
  6. Як функція хешування працює в php?