Schleife in C-Makro einfügen

Ich suche nach einer Möglichkeit, die folgende Funktionsstruktur in ein Makro zu konvertieren. Ich weiß, es ist ein dummes und sinnloses Beispiel, aber es veranschaulicht den Punkt, da ich meinen tatsächlichen Quellcode nicht herausgeben kann.

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

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

Damit ich die Funktion in main oder eine andere Funktion wie diese aufrufen kann:

int next_x = foo(x,y);

Ich kann die Syntax hier nicht 100% korrekt darstellen. Das ist mein schlechter Versuch:

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

Die Begründung für diex am ende ist es so, dass ich das theoretisch tun könnte

int next_x = FOO(x,y);

Stattdessen erhalte ich einen Syntaxfehler und bin mir nicht sicher, warum. Jede Hilfe wäre dankbar.

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

Zusätzliche Information

Ich sollte auch beachten, dass ich andere Makros habe, die entsprechend strukturiert sind:

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

Und so kann und habe ich Folgendes getan:

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

Antworten auf die Frage(3)

Ihre Antwort auf die Frage