Мы все знакомы с работой макросов в таких языках, как C. Существуют определенные ситуации, в которых расширения макросов могут привести к нежелательным результатам из-за случайного захвата идентификаторов.
Например:
|
Код фактически эквивалентен:
|
Выход:
x = 4, y = 9
Переменная a, объявленная в области действия основной функции, затеняется переменной a в определении макроса, поэтому a = 4 никогда не обновляется (так называемый случайный захват).
Гигиенические макросы
Гигиенические макросы — это макросы, расширение которых гарантированно не вызовет случайного захвата идентификаторов. Гигиенический макрос не использует имена переменных, которые могут помешать расширению кода.
Ситуации в приведенном выше коде можно избежать, просто изменив имя переменной в определении макроса, что приведет к другому выводу.
|
Выход:
x = 5, y = 9
Эта статья предоставлена Palash Nigam . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- X-Macros в Си
- Макросы против функций
- Многострочные макросы в Си
- Предопределенные макросы в C с примерами
- Макросы прогнозирования ветвлений в GCC
- Диапазоны типов данных и их макросы в C ++
- Аргументы переменной длины для макросов
- Интересные факты о макросах и препроцессорах в Си
- p5.js | Вступление
- AA Деревья | Комплект 1 (Введение)
- Введение в роутер
- Введение в SQLite
- Введение в API
- Введение в WebRTC
- Введение в язык C
0.00 (0%) 0 votes