如何编译使用term.h的程序?

pgm*_*ank 4 compiling gcc c 14.04

我尝试编译下面的代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <term.h>

//#include "/usr/include/term.h"

void clear_screen(void) {
    if (!cur_term) {
        int result;
        setupterm( NULL, STDOUT_FILENO, &result );
    if (result <= 0)
        return;
    }

    putp( tigetstr( "clear" ) );
}

int main(void) {
    puts("I am going to clear the screen");
    sleep(1);
    clear_screen();
    puts("Screen Cleared");
    sleep(1);
    clear_screen();

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

该程序测试使用term.h头文件清除终端屏幕的功能。我已经安装了所有需要的库:libncurses5并且libncurses5-dev当我编译带有或不带有-lncurses,-lcurses-lterminfo参数的gcc程序到编译器时,我得到了上面的输出:

In file included from clear_screen_UNIX.c:5:0:
clear_screen_UNIX.c:9:6: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘->’ token
 void clear_screen(void) {
      ^
clear_screen_UNIX.c: In function ‘main’:
clear_screen_UNIX.c:23:14: error: called object is not a function or function pointer
  clear_screen();
              ^
clear_screen_UNIX.c:26:14: error: called object is not a function or function pointer
  clear_screen();
              ^
Run Code Online (Sandbox Code Playgroud)

此外,当我term.h使用完整路径明确包含标题时,我将其/usr/include/term.h作为输出:

In file included from clear_screen_UNIX.c:7:0:
/usr/include/term.h:125:21: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘->’ token
 #define CUR cur_term->type.
                     ^
/usr/include/term.h:202:40: note: in expansion of macro ‘CUR’
 #define clear_screen                   CUR Strings[5]
                                        ^
clear_screen_UNIX.c:9:6: note: in expansion of macro ‘clear_screen’
 void clear_screen(void) {
      ^
clear_screen_UNIX.c: In function ‘main’:
clear_screen_UNIX.c:23:14: error: called object is not a function or function pointer
  clear_screen();
              ^
clear_screen_UNIX.c:26:14: error: called object is not a function or function pointer
  clear_screen();
              ^
Run Code Online (Sandbox Code Playgroud)

根据上面的说法,term.hheader里面有一些错误,我不相信。

那么我是否需要安装更多软件包或配置一些设置才能使代码成功编译?

PS:

  • 代码示例来自here
  • 我的 Ubuntu 版本是 14.04

mur*_*uru 5

确实clear_screen是一个宏:

$ grep clear_screen /usr/include/term.h
#define clear_screen                   CUR Strings[5]
Run Code Online (Sandbox Code Playgroud)

您将不得不使用其他名称,就像链接页面那样:

void Clear_screen (void)
Run Code Online (Sandbox Code Playgroud)

编译器消息还说明了这一点:

clear_screen_UNIX.c:9:6: note: in expansion of macro ‘clear_screen’
Run Code Online (Sandbox Code Playgroud)

这就是错误似乎存在的原因term.h- 宏扩展导致了那里。