В коде ядра иногда можно встретить объявления вроде:
#define set_mb(var, value) do {var = value; mb();} while 0
Непонятно, зачем делать цикл, который повториться только один раз.
Полагаю, это связано с нежелательной оптимизацией кода, реализуемой gcc,
но хотелось бы узнать поточнее. Кто-нибудь может внятно объяснить?
Вопрос по ядру (Просто интересно...)
Модератор: Модераторы разделов
-
darktiger
- Сообщения: 1
Re: Вопрос по ядру
Если определить без do/while, то при подстановке, например, в такой код
if (something) set_mb(var, val);
else ...
получится, что после } стоит ; что недопустимо, получится непонятная ошибка. Соображений оптимизации здесь нет, только удобство.
if (something) set_mb(var, val);
else ...
получится, что после } стоит ; что недопустимо, получится непонятная ошибка. Соображений оптимизации здесь нет, только удобство.