Como compilar programas que usam term.h?

4

Eu tento compilar o código abaixo:

#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;

}

Este programa testa uma função que usa o arquivo de cabeçalho term.h para limpar a tela do terminal. Instalei todas as bibliotecas necessárias: libncurses5 e libncurses5-dev e, quando compilo o programa com ou sem os parâmetros -lncurses , -lcurses e -lterminfo para o compilador gcc , obtenho a saída acima:

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();
              ^

Além disso, quando eu explicitamente incluo o cabeçalho term.h usando o caminho completo /usr/include/term.h , recebo isso como a saída:

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();
              ^

De acordo com o acima, o cabeçalho term.h tem alguns erros, algo em que não acredito.

Então eu preciso instalar mais alguns pacotes ou configurar algumas configurações para o código ser compilado com sucesso?

PS:

  • O exemplo de código é de aqui
  • Minha versão do Ubuntu é 14.04
por pgmank 19.04.2015 / 22:28

1 resposta

5

De fato, clear_screen é uma macro:

$ grep clear_screen /usr/include/term.h
#define clear_screen                   CUR Strings[5]

Você precisará usar outro nome, como a página vinculada:

void Clear_screen (void)

As mensagens do compilador também afirmam isso:

clear_screen_UNIX.c:9:6: note: in expansion of macro ‘clear_screen’

É por isso que os erros parecem estar em term.h - a expansão de macro leva até lá.

    
por muru 19.04.2015 / 22:43