Директива #undef удаляет ранее заданное определение имени макроса, то есть "аннулирует" его определение; само имя макроса должно находиться после директивы. В общем виде директива #undef выглядит таким образом:
#undef имя_макроса
Вот как, например, можно использовать эту директиву:
#define LEN 100 #define WIDTH 100 char array[LEN][WIDTH]; #undef LEN #undef WIDTH /* а здесь и LEN и WIDTH уже не определены */
И LEN, и WIDTH определены, пока не встретился оператор #undef.
Директива #undef используется в основном для того, чтобы локализовать имена макросов в тех участках кода, где они нужны.