Препроцессорные директивы в C++ позволяют совершать определенные действия до компиляции программы. Одной из таких директив является директива #define. Суть этой директивы в том, что можно задать определенную комбинацию символов, при компиляции которой, комбинация будет заменена на заданную строку. Приведем пример для наглядности:
1 2 3 4 5 |
#define Err "Error again.\n" /*...*/ if (x>12) printf(Err); |
В первой строке задается комбинация идентификатор-строка. При компиляции программы, строка printf(Err) заменится на printf("Error again.\n"), и уже в таком виде попадет в компилятор.
Можно использовать такие макросы и в других #define, но только если они заданы до их использования. Например:
1 2 |
#define Sht 15 #define Sht3 Sht*Sht*Sht |
Возможно так же в #define использовать в качестве строки и функцию, например, умножение или нахождение максимума. Это будет выглядеть следующим образом:
1 2 3 |
#define Max(a,b) ((a)>(b)) ? (a) : (b) #define Mult(a,b) (a*b) |
Вызов такой функции осуществляется аналогично: через идентификатор, который в этом случае будет иметь параметры.