getmaxyx 是如何工作的? (来自诅咒)
How does getmaxyx work? (from curses)
我对 "function" getmaxyx
的工作原理感到困惑...因为我知道它实际上是一个宏。但是这个宏是如何工作的呢?
代码示例:
#include <ncurses.h>
int main() {
int col, row;
initscr();
getmaxyx(stdscr,row,col);
endwin();
return 0;
}
阅读ncurses.h
头文件发现getmaxyx
确实是一个宏:
#define getmaxyx(win,y,x) (y = getmaxy(win), x = getmaxx(win))
进一步调查发现getmaxy
和getmaxx
也是宏:
#define getmaxx(win) ((win) ? ((win)->_maxx + 1) : ERR)
#define getmaxy(win) ((win) ? ((win)->_maxy + 1) : ERR)
现在,参数 win
是指向 WINDOW
的指针。事实上,WINDOW
是 struct _win_st
的类型定义。细读这个结构揭示了字段:
NCURSES_SIZE_T _maxy, _maxx; /* maximums of x and y, NOT window size */
因此,当创建一个新的 window 时,它与包含有关 window 的信息的 WINDOW
结构相关联。特别是,window 的最大 x 和 y 坐标存储在字段 _maxx
和 _maxy
中。这些字段由宏 getmaxyx()
访问以提供 window 维度。
我对 "function" getmaxyx
的工作原理感到困惑...因为我知道它实际上是一个宏。但是这个宏是如何工作的呢?
代码示例:
#include <ncurses.h>
int main() {
int col, row;
initscr();
getmaxyx(stdscr,row,col);
endwin();
return 0;
}
阅读ncurses.h
头文件发现getmaxyx
确实是一个宏:
#define getmaxyx(win,y,x) (y = getmaxy(win), x = getmaxx(win))
进一步调查发现getmaxy
和getmaxx
也是宏:
#define getmaxx(win) ((win) ? ((win)->_maxx + 1) : ERR)
#define getmaxy(win) ((win) ? ((win)->_maxy + 1) : ERR)
现在,参数 win
是指向 WINDOW
的指针。事实上,WINDOW
是 struct _win_st
的类型定义。细读这个结构揭示了字段:
NCURSES_SIZE_T _maxy, _maxx; /* maximums of x and y, NOT window size */
因此,当创建一个新的 window 时,它与包含有关 window 的信息的 WINDOW
结构相关联。特别是,window 的最大 x 和 y 坐标存储在字段 _maxx
和 _maxy
中。这些字段由宏 getmaxyx()
访问以提供 window 维度。