У цьому підручнику ви познайомитесь із препроцесорами c, і ви навчитесь використовувати #include, #define та умовну компіляцію за допомогою прикладів.
Препроцесор C - це макропроцесор (дозволяє визначити макроси), який перетворює вашу програму до її компіляції. Ці перетворення можуть бути включенням файлу заголовка, розширенням макросів тощо.
Усі директиви попередньої обробки починаються з #
символу. Наприклад,
#define PI 3.14
Деякі з найпоширеніших застосувань препроцесора C:
Включаючи файли заголовків: #include
#include
Препроцесор використовується для включення заголовних файлів в програмах на мові Сі. Наприклад,
#include
Ось stdio.h
файл заголовка. #include
Директива препроцесора замінює зазначену вище рядок з вмістом stdio.h
заголовка файлу.
Ось чому вам потрібно використовувати, #include
перш ніж ви зможете використовувати такі функції, як scanf()
і printf()
.
Ви також можете створити власний файл заголовка, що містить декларацію функції, і включити його у свою програму, використовуючи цю директиву препроцесора.
#include "my_header.h"
Відвідайте цю сторінку, щоб дізнатись більше про використання файлів заголовків.
Макроси з використанням #define
Макрос - це фрагмент коду, якому присвоєно ім’я. Ви можете визначити макрос на мові C, використовуючи #define
директиву препроцесора.
Ось приклад.
#define c 299792458 // speed of light
Тут, коли ми використовуємо c у нашій програмі, він замінюється на 299792458
.
Приклад 1: #define препроцесор
#include #define PI 3.1415 int main() ( float radius, area; printf("Enter the radius: "); scanf("%f", &radius); // Notice, the use of PI area = PI*radius*radius; printf("Area=%.2f",area); return 0; )
Функціонує як макроси
Ви також можете визначити макроси, які працюють подібним чином, як виклик функції. Це відоме як функціональні макроси. Наприклад,
#define circleArea(r) (3.1415*(r)*(r))
Щоразу, коли програма стикається circleArea(argument)
, вона замінюється на (3.1415*(argument)*(argument))
.
Припустимо, ми передали 5 як аргумент, тоді він розширюється, як показано нижче:
circleArea(5) expands to (3.1415*5*5)
Приклад 2: Використання #define препроцесора
#include #define PI 3.1415 #define circleArea(r) (PI*r*r) int main() ( float radius, area; printf("Enter the radius: "); scanf("%f", &radius); area = circleArea(radius); printf("Area = %.2f", area); return 0; )
Відвідайте цю сторінку, щоб дізнатись більше про макроси та #define препроцесор.
Умовна компіляція
У програмуванні на С ви можете вказати препроцесору, включати блок коду чи ні. Для цього можна використовувати умовні директиви.
Це схоже на if
твердження з однією великою різницею.
Оператор if
перевіряється під час виконання, щоб перевірити, чи слід виконувати блок коду чи ні, тоді як умови використовуються для включення (або пропуску) блоку коду до вашої програми перед виконанням.
Використання умовного
- використовувати інший код залежно від машини, операційної системи
- компілювати один і той же вихідний файл у двох різних програмах
- виключити певний код із програми, але зберегти його як довідковий для подальших цілей
Як використовувати умовний?
Щоб використовувати умовне, #ifdef
, #if
, #defined
, #else
і #elseif
використовуються директиви.
Директива #ifdef
#ifdef MACRO // conditional codes #endif
Тут умовні коди включаються в програму, лише якщо визначено MACRO.
#if, #elif та #else Директива
#if expression // conditional codes #endif
Тут вираз - це вираз цілочисельного типу (це можуть бути цілі числа, символи, арифметичний вираз, макроси тощо).
Умовні коди включаються в програму, лише якщо вираз обчислюється ненульовим значенням.
Необов'язкову #else
директиву можна використовувати з #if
директивою.
#if expression conditional codes if expression is non-zero #else conditional if expression is 0 #endif
Ви також можете додати вкладені умовні до вашого #if… #else
використання#elif
#if expression // conditional codes if expression is non-zero #elif expression1 // conditional codes if expression is non-zero #elif expression2 // conditional codes if expression is non-zero #else // conditional if all expressions are 0 #endif
#визначений
Спеціальний оператор #defined використовується для перевірки визначеності певного макросу чи ні. Він часто використовується з директивою #if.
#if defined BUFFER_SIZE && BUFFER_SIZE>= 2048 // codes
Попередньо визначені макроси
Ось кілька визначених макросів у програмуванні на C.
Макрос | Значення |
---|---|
__DATE__ | Рядок, що містить поточну дату |
__FILE__ | Рядок, що містить ім'я файлу |
__LINE__ | Ціле число, що представляє номер поточного рядка |
__STDC__ | Якщо відповідає стандарту ANSI C, тоді значення є ненульовим цілим числом |
__TIME__ | Рядок, що містить поточну дату. |
Приклад 3: Отримати поточний час за допомогою __TIME__
Наступна програма виводить поточний час за допомогою __TIME__
макросу.
#include int main() ( printf("Current time: %s",__TIME__); )
Вихідні дані
Поточний час: 19:54:39
Рекомендовані читання
- Управління лінією
- Прагми
- Вихід попереднього процесора
- Інші директиви