getmaxyx如何运作? (来自诅咒)

时间:2017-02-15 02:33:37

标签: c ncurses curses

我对"功能如何"感到困惑。 getmaxyx有效...因为我知道它实际上是一个宏。但是这个宏如何运作?

代码示例:

#include <ncurses.h>

int main() {
  int col, row;
  initscr();
  getmaxyx(stdscr,row,col);
  endwin();
  return 0;
}

1 个答案:

答案 0 :(得分:2)

阅读ncurses.h标题文件后发现getmaxyx确实是一个宏:

#define getmaxyx(win,y,x)       (y = getmaxy(win), x = getmaxx(win))

进一步调查显示getmaxygetmaxx也是宏:

#define getmaxx(win)            ((win) ? ((win)->_maxx + 1) : ERR)
#define getmaxy(win)            ((win) ? ((win)->_maxy + 1) : ERR)

现在,参数win是指向WINDOW的指针。实际上,WINDOWstruct _win_st的typedef。仔细阅读这个结构会显示以下字段:

NCURSES_SIZE_T _maxy, _maxx; /* maximums of x and y, NOT window size */

因此,当创建新窗口时,它与WINDOW结构相关联,该结构包含有关窗口的信息。特别是,窗口的最大x和y坐标存储在字段_maxx_maxy中。宏getmaxyx()可以访问这些字段以提供窗口尺寸。