LINUX.ORG.RU

Макросы и do {} while(0)


0

2

Может кто-то пояснить, зачем макросы засовывают в do{}while(0) ??? А то я что-то доехать не могу... Причем встречал почти где угодно.

★★★★★
Ответ на: комментарий от panter_dsd

> Ты бы хоть язык назвал. И что за макросы.

Си же.

geekless ★★
()

1. Обрамляет код в блок (корректно работает в if/else без {})
2. Заставляет ставить ; после.

Pavval ★★★★★
()
Ответ на: комментарий от Pavval

> 1. Обрамляет код в блок (корректно работает в if/else без {})

для этого достаточно было бы использовать фигурный скобочки в макросе, так что единственная цель - это

2. Заставляет ставить ; после.

unC0Rr ★★★★★
()
Ответ на: комментарий от unC0Rr

для этого достаточно было бы использовать фигурный скобочки в макросе

А вот и нет. Уже не помню, но на какие-то грабли я уже натыкался, когда вместо do{}while(0) писал просто фигурные скобочки.

Eddy_Em ☆☆☆☆☆
()

чтобы объявлять свои переменные внутри блока, не нарушая ansi с стандарт, который разрешает их объявлять только в начале блока перед любыми интсрукйиясм.и

bk_ ★★
()
Ответ на: комментарий от unC0Rr

> для этого достаточно было бы использовать фигурный скобочки в макросе, так что единственная цель - это

Не достаточно. Потому что тогда if (bla) SOME_MACRO(); else bla_bla(); раскроется в if (bla) {}; else bla_bla();

geekless ★★
()
Ответ на: комментарий от geekless

о! Точно - тут ; просто лишняя и дает ошибку на else.

Pavval ★★★★★
()

Всем спасибо, теперь полностью доехал :)

Jetty ★★★★★
() автор топика
Ответ на: комментарий от Led

Наверное потому что читаю по потребности нужный раздел :)
Хотя на текущий момент читаю уже подряд, ибо вижу что местами мелкие нюансы, которые вроде простые, но банально не знаю :)
Но это был вопрос на «логику» скорее :) Главное почему я недоумевал это «почему бы не использовать просто {}». Ну вот и выяснил :)

Jetty ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.