Директива #define с параметрами. Макроподстановка
Выше мы рассмотрели директиву препроцессора #define без параметров и выяснили, что с ее помощью выполняется обычная контекстная замена. Часто используется также "другой #define"? директива #define с параметрами. Как всегда, приведем сначала простой пример. В отличие от Паскаля в Си нет функции sqr (возведение в квадрат), хотя для записи некоторых выражений (например, формулы расстояния между двумя точками в пространстве) эта функция очень пригодилась бы. Конечно, написать такую функцию совсем просто, но в Си такие задачки обычно решаются посредством макроподстановок: #define с параметрами. Итак, пример:
#include <stdio.h>
#define SQR(x) (x)*(х)
void main(void)
{ float a;
printf ("\nВведите число:");scanf("%f",&a);
printf ("Его квадрат: %f\n",SQR(a)); }
Фактически директива #define с параметрами работает так же как и без параметров, - заменяет все вхождения своего первого аргумента (в данном случае sqr (х)) на второй аргумент (в данном случае (х) * (х)). Особенность этой директивы в том, что параметры ее формальные (это видно и из приведенного примера). То есть заменяются не только записи SQR (х), но и все записи вида SQR (выражение) на записи вида (выражение) * (выражение), Приведем еще несколько типичных примеров использования
директивы #define с параметрами:
#define ABS(х) ((х) >=0)? (х): (-(х))
#define МАХ(х,у) ((х)>(у))?(х):(у)
Файлы
Не нашли, что искали? Воспользуйтесь поиском:
|