2017-02-15 5 views
-1

Я смущен тем, как работает «функция» getmaxyx ... Потому что теперь я на самом деле макрос. Но как работает этот макрос?Как работает getmaxyx? (от проклятий)

Пример кода:

#include <ncurses.h> 

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

Если это макрос, вы можете увидеть, как он работает, читая файл include, в котором он определен. –

ответ

1

Чтение файла 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(), чтобы предоставить размеры окна.

Смежные вопросы