Макросы. Директива #define. Примеры
Содержание
- 1. Понятие макроса. Директива #define
- 2. Реализация макросов в программах. Пример, который демонстрирует использование 3-х макросов в программах
- 3. Пример, в котором в одном макросе используется результат другого макроса. Вычисление площади треугольника
- 4. Пример разбиения решения задачи на несколько макросов. Решение квадратного уравнения
- Связанные темы
Поиск на других ресурсах:
1. Понятие макроса. Директива #define
В программах могут встречаться повторяющиеся фрагменты кода. Для того, чтобы вызвать часто используемые фрагменты кода, в программах на C++ можно использовать:
- функции;
- макросы.
Для объявления макроса используется директива #define. Общая форма объявления макроса следующая:
#define MacroName(parameters) expression
здесь
- MacroName – имя макроса;
- parameters – параметры, которые получает макрос;
- expression – выражение, которое вычисляет макрос. Выражение размещается той же строке, что и директива #define.
После объявления макроса его можно использовать как вызов обычной функции.
⇑
2. Реализация макросов в программах. Пример, который демонстрирует использование 3-х макросов в программах
Задача 1. Разработать программу, которая реализует 3 макросы:
- SQR(x) – возвращает значение x2;
- POWER_4(x) – возвращает x4;
- SIGN(x) – определяет знак числа.
Текст программы на языке C++
#include <iostream> using namespace std; // Тема: Раскрытие макроса // Используется директива препроцессора #define // #define Имя_макроса(Параметры) (Выражение) // 1. Макрос, который возводит число x в квадрат #define SQR(x) ((x) * (x)) // 2. Макрос, возводящий число x в степень 4 #define POWER_4(x) (SQR(x) * SQR(x)) // 3. Макрос, возвращающий -1 если число отрицательно, 0 - если нулевое, 1 - если положительное #define SIGN(x) (((x)<0)? -1 :(((x)==0) ? 0 : 1)) void main() { // Демонстрация использования макросов в программе // 1. Объявить переменные int x; // 2. Ввести x с клавиатуры cout << "x = "; cin >> x; // 3. Вызвать макросы и вывести результат на экран cout << "SQR(x) = " << SQR(x) << endl; cout << "POWER4(x) = " << POWER_4(x) << endl; cout << "SIGN(x) = " << SIGN(x) << ::endl; system("pause"); }
⇑
3. Пример, в котором в одном макросе используется результат другого макроса. Вычисление площади треугольника
В данном примере демонстрируется вызов макроса из другого макроса. Решается задача вычисления площади треугольника по сторонам a, b, c. Если из сторон a, b, c невозможно образовать треугольник, то макрос возвращает 0.
Текст программы
#include <iostream> using namespace std; // Макросы. Директива #define // Вычислить площадь треугольника по сторонам a, b, c. // Если из сторон a, b, c невозможно создать треугольник, то вернуть 0. // Вычисление полупериметра #define P(a, b, c) ((a+b+c)/2.0) // Определение, можно ли из сторон a, b, c образовать треугольник #define IS_TR(a, b, c) ((((a+b)>c)&&((b+c)>a)&&((a+c)>b)) ? true : false) // Вычисление площади. Из данного макроса вызываются два других макроса: IS_TRIANGLE и P #define AREA_TR(a, b, c) ((IS_TR(a,b,c)) ? (sqrt(P(a,b,c)*(P(a,b,c)-a)*(P(a,b,c)-b)*(P(a,b,c)-c))) : 0) void main() { // Демонстрация работы макросов double a, b, c; double area; // площадь - результат double sp; // полупериметр cout << "a = "; cin >> a; cout << "b = "; cin >> b; cout << "c = "; cin >> c; sp = P(a, b, c); area = AREA_TR(a, b, c); cout << "semiperimeter = " << sp << endl; cout << "area = " << area << endl; }
Результат работы программы
a = 5 b = 8 c = 4.5 semiperimeter = 8.75 area = 10.2269
⇑
4. Пример разбиения решения задачи на несколько макросов. Решение квадратного уравнения
В примере демонстрируется решение квадратного уравнения. В программе объявляется 4 макроса. Также определяется, имеет ли уравнение корни.
Текст программы следующий
#include <iostream> using namespace std; // Макросы. Директива #define // Вычисление дискриминанта #define D(a, b, c) ((double)b*b-4*a*c) // Определение, есть ли корни в уравнении, заданном коэфициентами a, b, c #define IS_ROOTS(a, b, c) ((D(a, b, c)>=0) ? true : false) // Вычисление корней #define X1(a, b, c) (IS_ROOTS(a, b, c) ? ((-b - sqrt(D(a, b, c)))/(2.0*a)) : 0) #define X2(a, b, c) (IS_ROOTS(a, b, c) ? ((-b + sqrt(D(a, b, c)))/(2.0*a)) : 0) void main() { double a, b, c; double d; double x1, x2; cout << "a = "; cin >> a; cout << "b = "; cin >> b; cout << "c = "; cin >> c; if (IS_ROOTS(a, b, c)) { x1 = X1(a, b, c); x2 = X2(a, b, c); cout << "x1 = " << x1 << endl; cout << "x2 = " << x2 << endl; } else { cout << "The equation has no solutions"; } }
Результат работы программы
a = 4 b = -5 c = -6 x1 = -0.75 x2 = 2
⇑
Связанные темы
- Inline функции-члены класса. Ключевое слово inline
- Описание функции. Фактические и формальные параметры. Передача параметров в функцию по значению и по адресу. Прототип функции
⇑