Главная | Случайная
Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Директива #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 МАХ(х,у) ( (х)>(у))?(х):(у)

 


Файлы




Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2019 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных