Директива #define имеет два общих применения.
Первый - это контроль работы компилятора. Для этого нам также нужны #undef, #ifdef и #ifndef. (и #endif тоже ...)
Вы можете сделать "логику компилятора" таким образом. Обычно используется для активации или нет отладочной части кода, например:
#ifdef DEBUG
//debug code here
#endif
И вы сможете, например, скомпилировать код отладки, написав #define DEBUG
Другое использование этой логики - избегать двойных включений ...
Пример, файл A, # включает в себя файлы B и C. Но файл B также включает в себя C. Это, вероятно, приведет к ошибке компиляции, поскольку «C» существует дважды.
Решение пишется:
#ifndef C_FILE_INCLUDED
#define C_FILE_INCLUDED
//the contents of header "c" go here.
#endif
Другое использование #define, это макросы make.
Самые простые, состоят из простых подстановок, таких как:
#define PI 3.14159265
float perimeter(float radius) {
return radius*2*PI;
}
или
#define SHOW_ERROR_MESSAGE printf("An serious error happened");
if ( 1 != 1 ) { SHOW_ERROR_MESSAGE }
Затем вы также можете создавать макросы, которые принимают аргументы, сам printf обычно является макросом, созданным с помощью #define в заголовочном файле.
Но этого не следует делать по двум причинам:
во-первых, макросы speed os аналогичны встроенным, а во-вторых, у нас есть шаблоны c ++, которые позволяют лучше контролировать функции с переменным типом. Таким образом, единственная причина использовать макросы с аргументами - создавать странные конструкции, которые потом будет трудно понять, например, метапрограммированные вещи ...