Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 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-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных