Вопрос по ядру (Просто интересно...)

Модератор: Модераторы разделов

MedVed
Сообщения: 112

Вопрос по ядру

Сообщение MedVed »

В коде ядра иногда можно встретить объявления вроде:

#define set_mb(var, value) do {var = value; mb();} while 0

Непонятно, зачем делать цикл, который повториться только один раз.
Полагаю, это связано с нежелательной оптимизацией кода, реализуемой gcc,
но хотелось бы узнать поточнее. Кто-нибудь может внятно объяснить?
МСВС 3.0/Linux Mandrake 8.0
Спасибо сказали:
darktiger
Сообщения: 1

Re: Вопрос по ядру

Сообщение darktiger »

Если определить без do/while, то при подстановке, например, в такой код

if (something) set_mb(var, val);
else ...

получится, что после } стоит ; что недопустимо, получится непонятная ошибка. Соображений оптимизации здесь нет, только удобство.
Спасибо сказали: