簡體   English   中英

如何將 function 定義為宏?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM