C 如何将函数定义为宏?
我试图将此函数转换为宏以减少代码行C 如何将函数定义为宏?,c,function,macros,C,Function,Macros,我试图将此函数转换为宏以减少代码行 void gotoxy(int x,int y) //cursor placing { COORD coord; coord.X =x; coord.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord); } 以宏的形式编写此函数的正确方法是什么? 我已经尝试过了 #define gotox
void gotoxy(int x,int y) //cursor placing
{
COORD coord;
coord.X =x;
coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
以宏的形式编写此函数的正确方法是什么?
我已经尝试过了
#define gotoxy(x,y) COORD coord;coord.X = x;coord.Y = y ; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord)
它显示了没有链接的“coord”的[Error]重新声明。您需要使用{}将语句绑定到一个范围中。在宏中执行此操作的常用方法是“do while(0)”技巧: {}范围允许您引入局部变量。这里解释了“边做边做(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预处理器就可以保存下来。宏是魔鬼的发明。你应该把宏转换成函数,而不是相反。至于“减少代码行”的目标,不要。您试图做的是使代码更难阅读、理解和维护。源代码的大小与优化的可执行程序的大小几乎没有关系。
COORD coord{x,y};