Какая польза от do while (0), когда мы определяем макрос?
Он позволяет группировать lisp-macros несколько операторов в один c макрос.
Предположим, вы сделали macro что-то вроде:
if (foo)
INIT_LIST_HEAD(bar);
Если макрос macro был определен без инкапсулирующего custom-macros do {...} while (0);, приведенный lisp-macros выше код расширился бы до
if (foo)
(bar)->next = (bar);
(bar)->prev = (bar);
Это scala-macros явно не то, что было задумано, так custom-macros как только первая инструкция custom-macros будет выполнена, если foo lisp-macros удерживается. Второй оператор lisp-macros будет выполняться независимо macro от того, удерживается ли custom-macros foo.
Изменить: дополнительные linux-kernel пояснения на страницах http://c-faq.com/cpp/multistmt.html и scala-macros http://developer.apple.com/documentation/DeveloperTools/gcc-4.0.1/cpp/Swallowing-the-Semicolon.html#Swallowing-the-Semicolon
c
macros
linux-kernel
Какая польза от do while (0), когда мы определяем макрос?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.