Директива #undef
Директива #undef отменяет ранее определённый макрос,
созданный с помощью директивы #define. В качестве
параметра директива принимает имя макроса, который нужно
отменить. После этого имя макроса перестаёт заменяться
препроцессором на своё значение, и его можно снова
определить заново.
Директива #undef не выдаёт ошибку, если указанный
макрос не был определён ранее. Это позволяет безопасно
отменять макросы, не проверяя их существование.
Синтаксис
#undef MACRO_NAME
Пример
Давайте определим макрос VALUE, используем его,
затем отменим с помощью #undef и попробуем
использовать снова:
#include <iostream>
using namespace std;
#define VALUE 42
int main()
{
cout << VALUE << endl;
#undef VALUE
// VALUE больше не является макросом
int VALUE = 10;
cout << VALUE << endl;
return 0;
}
Результат выполнения кода:
42
10
Пример
Давайте отменим макрос и определим его заново с другим значением:
#include <iostream>
using namespace std;
#define VALUE 100
int main()
{
cout << VALUE << endl;
#undef VALUE
#define VALUE 200
cout << VALUE << endl;
return 0;
}
Результат выполнения кода:
100
200
Пример
Давайте проверим, что после отмены макроса его имя можно использовать как обычный идентификатор:
#include <iostream>
using namespace std;
#define MAX 100
int main()
{
cout << MAX << endl;
#undef MAX
int MAX = 5;
cout << MAX << endl;
return 0;
}
Результат выполнения кода:
100
5