Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将函数定义为宏?_C_Function_Macros - Fatal编程技术网

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};