[英]How to define function as macro?
我正在嘗試將此 function 轉換為宏以減少代碼行。
void gotoxy(int x,int y) //cursor placing
{
COORD coord;
coord.X =x;
coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
將此 function 編寫為宏的正確方法是什么? 我試過這個
#define gotoxy(x,y) COORD coord;coord.X = x;coord.Y = y ; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord)
它顯示 [錯誤] 重新聲明“坐標”而沒有鏈接。
您需要使用 {} 將語句捆綁到一個 scope 中。 在宏中執行此操作的常用方法是“do while(0)”技巧:
#define gotoxy(x, y) do { \
COORD coord; \
coord.X = x; \
coord.Y = y; \
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); \
} while(0)
{} scope 允許您引入局部變量。 這里解釋了“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 預處理器,就可以節省兩行代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.