Macros doesn't have return values, they are a simple "search and replace" mechanism provided by the preprocessor. "int MAX2" and "int MAX3" in main are local variables which have nothing to do with your macro.
The post I replied to looked like this before it was mysteriously edited/removed:
Code:
#define MAX2(x,y)
#define MAX3(x,y,z)
int main()
{
int x, y, z;
int MAX2 = (x > y) ? x : y;
int MAX3 = (MAX2 > z) ? MAX2 : z;
printf("Max value of MAX2 is: %d\n", MAX2(x,y));
printf("Max value of MAX3 is: %d\n", MAX3(x,y,z));
}