Wprowadzanie pętli do makra C

Szukam sposobu konwertowania następującej struktury funkcji na makro. Wiem, że to głupi i bezsensowny przykład, ale ilustruje to punkt, ponieważ nie mogę podać mojego rzeczywistego kodu źródłowego.

int foo(int x, int y)
{
  do
  {
    --x;
    ++y;
  }while(x > y);

  return x * y; //note that x and y have changed values here.
}

Żeby móc wywołać funkcję w głównej lub innej takiej funkcji:

int next_x = foo(x,y);

Wydaje mi się, że nie mam tutaj 100% poprawnej składni. To moja biedna próba:

#define FOO(x,y)      \
(                     \
  do                  \
  {                   \
    --x;              \
    ++y;              \
  }while(x < y),      \
  x                   \
)                     

Uzasadnienie dlax na końcu jest tak, że teoretycznie mógłbym to zrobić

int next_x = FOO(x,y);

ale zamiast tego otrzymuję błąd składniowy i nie jestem pewien dlaczego. Każda pomoc byłaby doceniana.

===============================================

Dodatkowe informacje

Powinienem również zauważyć, że mam inne makra, które są odpowiednio skonstruowane:

#define INIT(x,y)   
(   
  x = //something,
  y = //something
)

#define NEXT_INT(x,y)    \
(                        \
  INIT(x,y),             \
  get_next_num(x,y)      \            //Note, this is an inline function call , not a macro.
 )

#define NEXT_FLOAT(x,y,temp)         \
(                                    \
  temp = NEXT_INT(x,y),              \
  temp ? temp * 1.23456 : FLT_MIN    \
)                                    

I tak mogę i zrobiłem co następuje:

float my_flt = NEXT_FLOAT(x,y,temp);

questionAnswers(3)

yourAnswerToTheQuestion