Вам нужно связать операторы в одну область, используя {}. Обычный способ сделать это в макросе - это трюк «do while (0)»:
#define gotoxy(x, y) do { \
COORD coord; \
coord.X = x; \
coord.Y = y; \
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); \
} while(0)
Область {} позволяет вам вводить локальные переменные. Здесь объясняется трюк с «do while (0)»: do {...} while (0) - для чего он нужен?
Но вы говорите, что делаете это чтобы уменьшить количество строк кода, поэтому вот лучший способ достичь этой странной цели:
void gotoxy(int x,int y){COORD coord; coord.X=x; coord.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);}
Конечно, вы никогда не должны писать код в этом стиле, но если кто-то угрожает убить вас, если вы не уменьшите количество строк кода в вашем проекте, это спасет вашу жизнь.
Наконец, из документации мы видим, что COORD - это структура, содержащая только X и Y, поэтому мы можно упростить это:
COORD coord;
coord.X=x;
coord.Y=y;
до этого:
COORD coord{x,y};
Это две строки, сохраненные без продажи вашей души препроцессору C.