0

我试图了解 ncurses 的工作原理,因为我们要求initscr()ncurses 初始化屏幕

在文件 ncurses lib_initscr.c 中定义的函数并尝试通过 newterm 即 lib_newterm.c 文件打开终端,它使用:

if ( TINFO_SETUP_TERM(&new_term, name,fileno(_ofp), &errret, FALSE) != ERR) ){
}

当我打开 curses.priv.h 为:

#ifdef USE_TERM_DRIVER
    #define TINFO_SETUP_TERM(tpp, name, fd, err, reuse) \
        _nc_setupterm_ex(tpp, name, fd, err, reuse)
#else

    #define TINFO_SETUP_TERM(tpp, name, fd, err, reuse) \
        _nc_setupterm(name, fd, err, reuse)
#endif

在 lib_setup.c 中,函数定义如下:

#ifdef USE_TERM_DRIVER
    NCURSES_EXPORT(int) _nc_setupterm(
            NCURSES_CONST char *tname, int Filedes, int *errret, bool reuse){
            }
#endif

我没有找到_nc_setupterm_ex()源代码中定义的函数在哪里,如果USE_TERM_DRIVER没有定义,那么它如何链接到_nc_setupterm();

4

1 回答 1

1

TINFO_SETUP_TERM在(ncurses 5.9 源代码中的第 577 行)中定义,ncurses/tinfo/lib_setup.c您显示的宏将函数的名称设置为_nc_setupterm_nc_setupterm_ex

如果USE_TERM_DRIVER已定义,则TINFO_SETUP_TERM定义为_nc_setupterm_ex_nc_setupterm成为TINFO_SETUP_TERM( nc_setupterm_ex)的包装器

如果您引用的 USE_TERM_DRIVER is not defined thenTINFO_SETUP_TERM is defined as_nc_setupterm and the definition of_nc_setupterm` 没有被编译。

于 2013-04-04T20:04:07.750 回答