Положить цикл внутри макроса C

Я ищу способ преобразовать следующую структуру функции в макрос. Я знаю это'Это глупый и бессмысленный пример, но он иллюстрирует суть, поскольку я не могу выдать свой настоящий исходный код.

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

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

Чтобы я мог вызвать функцию в main или какую-то другую функцию, например, так:

int next_x = foo(x,y);

Я не могу получить синтаксис 100% правильный здесь. Это моя неудачная попытка:

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

Обоснование для х в конце концов, чтобы я мог, теоретически, быть в состоянии сделать это

int next_x = FOO(x,y);

но вместо этого я получаю синтаксическую ошибку иЯ не уверен, почему. Любая помощь будет оценена.

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

Дополнительная информация

Я также должен отметить, что у меня есть другие макросы, которые соответственно структурированы:

#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    \
)                                    

И так, я могу и сделал следующее:

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

Ответы на вопрос(3)

Ваш ответ на вопрос