Undefing функционально-подобный макрос

В C/С++ есть 2 типа макроса:

 #define ABC   /* usual */

und

 #define FUNC(a)  /*function-like*/

Но как я могу их определить?

Обновление: Таким образом, нет разницы между undefing "макросом, похожим на константу" и "функционально подобным макросом"?

Ответ 1

#undef ABC
#undef FUNC

#undef "отменяет" предыдущий #define. Эффект, как если бы у вас никогда не было предыдущего #define для конкретного идентификатора. Обратите внимание, что #define не учитывает область видимости, поэтому лучше использовать их только тогда, когда вам нужно.

Также обратите внимание, что не имеет значения, использует ли один макрокоманд "обычный" синтаксис, в то время как другой использует "функциональный" синтаксис. #define ABC и #define ABC(A) оба определяют макрос с именем ABC. Если у вас есть оба, без #undef одного из них, последний из них "переопределяет" другой. (Некоторые компиляторы могут выдать предупреждение, если это произойдет.)

Ответ 2

#undef ABC
#undef FUNC