Чтение файла 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
является typedef struct _win_st
. Прочтение этой структуры показывает поля:
NCURSES_SIZE_T _maxy, _maxx; /* maximums of x and y, NOT window size */
Так что, когда создается новое окно, оно связано с WINDOW
структурой, которая содержит информацию об окне. В частности, максимальные координаты x и y окна сохраняются в полях _maxx
и _maxy
. К этим полям обращается макрос getmaxyx()
, чтобы предоставить размеры окна.
Если это макрос, вы можете увидеть, как он работает, читая файл include, в котором он определен. –