Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BOOK_С_INTUIT.doc
Скачиваний:
4
Добавлен:
19.09.2019
Размер:
7.91 Mб
Скачать

Директива #define

Директива #define определяет идентификатор и последовательность символов, которые будут подставляться вместо идентификатора каждый раз, когда он встретится в исходном файле. Идентификатор называется именем макроса, а сам процесс замены – макрозаменой (макрорасширением, макрогенерацией, макроподстановкой) [3]. В общем виде директива #define выглядит следующим образом (должны использоваться буквы латинского алфавита):

#define имя_макроса последовательность_символов

В определении, как правило, в конце последовательности символов точка с запятой не ставится. Между идентификатором и последовательностью символов последовательность_символов может быть любое количество пробелов, но признаком конца последовательности может быть только разделитель строк [3]. Имена макросов обычно задаются с помощью букв верхнего регистра. У директивы #define оно может определяться с формальными параметрами. Тогда каждый раз, когда в программе встречается имя макроса, используемые в его определении формальные параметры заменяются теми аргументами, которые встретились в программе. Такого рода макросы называются макросами с формальными параметрами (макроопределениями с параметрами и макросами, напоминающими функции) [3]. Ключевым элементом макроса с параметрами являются круглые скобки, внутри которых находятся собственно формальные параметры. Рассмотрим пример макроса с тремя параметрами для определения следующего условия: будет ли остаток от деления случайной функции на правую границу интервала больше, чем половина этого интервала.

Программный код решения примера

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <time.h>

#define MAX(a,b,c) ((1+rand()%(b)) > ((a)+(b))/2 ) ? (c):(b)

int main (void)

{

int a, b, c;

srand((unsigned) time(NULL));

printf("\n Enter a, b, c: ");

scanf_s("%d%d%d", &a, &b, &c);

printf("\n MAX(a,b,c): %d\n", MAX(a,b,c));

printf("\n\n ... Press any key: ");

_getch();

return 0;

}

В общем случае формальные параметры, над которыми выполняются те или иные действия, рекомендуется заключать в круглые скобки.

Использование вместо настоящих функций макросов с формальными параметрами (т. е. a, b, с) дает преимущество: увеличивается скорость выполнения кода, потому что в таких случаях не надо тратить ресурсы на вызов функций. Кроме того, макрос не чувствителен к типу данных, т. е. в нем отсутствует проверка типов аргументов. Однако если у макроса с формальными параметрами очень большие размеры, то тогда из-за дублирования кода увеличение скорости достигается за счет увеличения размеров программы [3]. Кроме того, в конструировании макроса следует быть очень внимательным. Как правило, макросы используются для небольших пользовательских функций [4].

Директива #error

Директива #error заставляет компилятор прекратить компиляцию [3], используется в основном для отладки. В общем виде выглядит следующим образом:

#error сообщение – об – ошибке

Заданное сообщение об ошибке в двойные кавычки не заключается. Когда встречается эта директива, то выводится сообщение об ошибке, возможно вместе с другой информацией, определяемой компилятором [3].

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]