ПредишенСледващото

#define директива уточнява самоличността и последователност от символи, която ще бъде за-страхливци този идентификатор, когато се открива в програмата. Identifier т.нар името на макроса, а процесът на замяна се нарича макро смяна. Standare харесван гледка към директивата, както следва:

#define макро име posledovatelnost_simvolov

Имайте предвид, че в тази декларация не е точка и запетая. Между identifikato-сет и поредица от символи може да бъде произволен брой пропуски. Макро-що завършили прехода към нов ред.

Например, ако това е необходимо да се използва стойност 1 за TRUE, фалшива до 0 е възможно да се декларира следните две макроси:

# определят вярно 1
# определят FALSE 0

В резултат на това, ако компилаторът намира в текста на вярно или невярно програма, той ще ги замени на 1 и 0, съответно. Например, следният ред показва "0 1 2":

ФОРМАТ (фалшиво, вярно, вярно + 1 "...");

Ако се дефинира макроса, може да се използва за определяне на други макроси. Например, следния код присвоява имена на една, две и три на техните числени стойности:

# определят ЕДИН 1
# определят Две + ЕДИН
#def Ine ТРИ ЕДИН + ДВЕ

В резултат на макро идентификатори се заменят с определения низ. Ако не е необходимо да се определи стандарт съобщение за грешка, можете да напишете нещо като пътека-водач:

#define E_MS "Стандарт грешка на входа. \ Н"
/ *. * /
ФОРМАТ (E_MS);

Ако компилаторът разпознава E_MS идентификатор, той го замества с линия «Стандарт грешката на входа.» В действителност, компилаторът вижда изявлението като

ФОРМАТ ( "Стандарт грешка на вход \ н.");

Ако идентификаторът е в линията, заместването се случи. Например:

# определят XYZ това е тест
/ *. * /
ФОРМАТ ( "XYZ");

не донася «Това е тест», а «XYZ».

Ако низът не се побира на един ред, а след това може да продължи на следващия ред, пускане в края на линия наклонена черта, както е показано в следния пример:

#define LONG_STRING "Това е един много дълъг" \
низ, който се използва като пример. "

Програмистите пишат в C, често се използват за определяне на пределни Идентификация Тори на. Това споразумение помага някой друг програма за четене, което му придава един поглед, вижте какво има да се справят с макро. Също VCE #define по-добра позиция в началото на файла, или дори в отделен файл заглавието.

Много често, макроси, използвани за определяне на "магически числа", използвани в про-грам. Например, програмата може да се определи масата и да има някои процедури за работа с тях. Вместо твърд код на размера на масива, за да определи по-добре макро, съответно-отговарящ размер на масива, и да я използват на места, където това е необходимо да се използва времето мярка. По този начин, ако искате да промените размера на масива, единственото нещо, което трябва да направите - е да се промени отчета за #define и компилирате програмата. Където и valsya употреба този макрос, ще има автоматични промени. Разгледаме следния пример:

# определят MAX_SIZE 100
/ *. * /
поплавък баланс [MAX_SIZE];
/ *. * /
поплавък температура [MAX_SIZE];

За да промените размера на двата масива просто смяна MAX_SIZE на дефиниция.

#define директива има и друга възможност: макрос може да има аргументи. Всеки път, когато на заседание на този макро макро аргументи ще бъде заменен от реален аргумент про-гр. Този вид се нарича макро макро тип функция. Например:

#include
#define MIN (а, б) ((а)<(b)). (a). (b)
вътр главния (свободен)
Int х, у;
х = 10; у = 20;
ФОРМАТ ( "Минималната е :." MIN (х, у));
връщане 0;
>

В програма компилация вместо минути (а, Ь) по-горе израз е заместен, където вместо сляпо параметри а и б са заместени реално х и у. По този начин, чрез заместване на функцията ФОРМАТ () има следната форма:

ФОРМАТ ( "Минималната е :.", ((х) <(y) ). (x). (y) );

Човек трябва да бъдат внимателни при определяне на макроси, които получават аргументи, или може да бъде полу-чит някои неочаквани резултати. Помислете например за следните програми краткосрочен мю, използващи макро за определяне паритетни стойности:

/ * Програма произвежда грешни резултати * /
#include
# определят ДОРИ (а) 2% == 0. 1. 0
вътр главния (свободен)
ако (ДОРИ (9 + 1)) ФОРМАТ ( "е дори");
останало ФОРМАТ ( "е нечетно");
връщане 0;
>

Поради начина на заместване, програмата не работи правилно. В резултат на това програма компилация ДОРИ (9 + 1), за да се разшири

Както е известно, по модул оператори има по-висок приоритет от оператор-слой zheniya. Това означава, че на първия модул се изпълнява, като номер 1, а след това резултатът ще бъде добавен към 9, което, естествено, не може да бъде 0. За да разрешите този проблем следва да сключва издухване в ДОРИ и макро в скоби, както е показано на следното правата вяра-тези програми:

#include
# определят ДОРИ (а) (а) 2% == 0. 1. 0
вътр главния (свободен)
ако (ДОРИ (9 + 1)) ФОРМАТ ( "е дори");
останало ФОРМАТ ( "е нечетно");
връщане 0;
>

Имайте предвид, че 9 + 1 се изчислява, преди да вземе върху модула. Като цяло, за сключване на макро параметрите в скоби - това е добра идея, и ви позволява да се избегнат много проблеми.
С помощта на макро заместване вместо реални функции на предимство на един голям ТА е - значително увеличава скоростта на програмата, тъй като няма нужда да губите време за извикване на функция и да се върне от него. Въпреки това, за това увеличение на скоростта трябва да плати увеличение на размера на изпълнимия код на програмата, тъй като магистърски програми принудени да дублира макро код.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!