В този урок ще се запознаете с c препроцесори и ще се научите да използвате #include, #define и условна компилация с помощта на примери.
Препроцесорът C е макропроцесор (позволява ви да дефинирате макроси), който преобразува вашата програма, преди да бъде компилирана. Тези трансформации могат да бъдат включване на заглавен файл, разширения на макроси и т.н.
Всички директиви за предварителна обработка започват със #
символ. Например,
#define PI 3.14
Някои от често срещаните приложения на C препроцесора са:
Включително заглавни файлове: #include
В #include
Препроцесорът се използва за включване на заглавни файлове на програми C. Например,
#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 препроцесор.
Условна компилация
При програмирането на C можете да инструктирате препроцесора дали да включва блок код или не. За целта могат да се използват условни директиви.
Подобно е на 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
Специалният оператор #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
Препоръчителни четива
- Контрол на линията
- Прагми
- Изход на препроцесор
- Други директиви