Макроподстановки
Макрос – это средство замены одной последовательности символов другой (замена в тексте простейшая форма макроса).
Большими возможностями обладают макроопределения с параметрами.
Формат макроподстановки с параметрами:
#define <идентификатор>(<список_параметров>) <текст>
Примеры:
#define max(a, b) a<b?b:a
Вхождение в программу max(x, 10) заменяется на x<10?10:x
#define abs(x) x>=0?x:-x
Вхождение в программу abs(a) заменяется на a>=0?a:-a
Отличие макросов от функций
1. Функции имеют код (за исключением inline-функций) в одном экземпляре, а коды макроса вставляются в программу столько раз, сколько используется макрос, причем подстановка для макроса осуществляется всегда.
2. Функции работают с определенными типами параметров, макрос пригоден для обработки параметров любого типа, допустимых в выражении строки замещения.
Механизм перегрузки и шаблоны функций в Си++ позволяют решать те же задачи.
Ниже представлен пример с использованием макросов. В примере вместо скобок { } используются слова begin/BEGIN и end/END, как в зыке Паскаль, на самом деле в тексте эти слова заменяются на соответствующие скобки. Также представлен пример макроса с параметрами.
#include <stdio.h>
#define begin {
#define end }
#define BEGIN {
#define END }
#define max(a, b) a>b?a:b
int main(int argc, char* argv[])
{
int A[10];
int i;
int x=10, y=5, z;
for(i=0; i<10; i++) begin
A[i]=i*i;
printf("%d ", A[i]);
end
z=max(x, y); // z=x>y?x:y;
printf("z=%d", z);
return 0;
}
Дата добавления: 2015-08-14; просмотров: 634;