Здравствуйте, Александр!

> С интересом бы посмотрел на такую библиотеку макросов. Попробовал бы 
> переписать с её использованием два примера циклов while из предыдущего 
> письма. У вас она где-нибудь в интернете опубликована?

Библиотекой назвать вряд ли стоит, там всего несколько макро- и
шаблонных определений.  Выложил здесь:
http://www.math.bas.bg/bantchev/misc/m.cpp

Чудес не ожидайте, вещи совсем простые.
С другой стороны, там не только о циклах, но и пара других, как мне
кажется, полезных вещей.  Буду рад, если что-то вам пригодится.

В следующем тексте написано немного об идеологии:
http://www.math.bas.bg/bantchev/misc/neater.pdf ,
но он немного различается как раз в отношении макроопределений для
циклов.  Впрочем, в этом разберетесь легко.

Что касается вашего первого примера с while

int row = 0, col = 0;
while (row < MAXROW && elem_at(row, col) == 0) {
  ++col;
  if (col == MAXCOL) {
    col = 0;
    ++row;
  }
}

то, мне кажется, его легко переписать и стандартными for:

for (row=0; row < MAXROW; ++row)
  for (col=0; col < MAXCOL; ++col)
    if (elem_at(row,col)) goto x;
x:

По-моему, так текст и короче, и разобрать легче, а и выполняемых на
каждом шагу действий меньше.  Если goto очень раздражает (не меня),
то можно и без него:

for (row=0; row < MAXROW; ++row) {
  for (col=0; col < MAXCOL; ++col)
    if (elem_at(row,col)) break;
  if (col < MAXCOL) break;
}

Ответить