web-dev-qa-db-fra.com

Comment compiler des programmes qui utilisent term.h

J'essaie de compiler le code ci-dessous:

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

}

Ce programme teste une fonction qui utilise le fichier d’en-tête term.h pour effacer l’écran du terminal. J'ai installé toutes les bibliothèques nécessaires: libncurses5 et libncurses5-dev et lorsque je compile le programme avec ou sans les paramètres -lncurses, -lcurses et -lterminfo au nom gcc compilateur je reçois la sortie ci-dessus:

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

De plus, quand j'inclus explicitement l'en-tête term.h en utilisant son chemin complet /usr/include/term.h, je reçois ceci comme sortie:

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

D'après ce qui précède, l'en-tête term.h contient des erreurs, ce à quoi je ne crois pas.

Dois-je installer d'autres packages ou configurer certains paramètres pour que le code soit compilé avec succès?

PS:

  • L'exemple de code est de ici
  • Ma version Ubuntu est 14.04
4
pgmank

En effet, clear_screen est une macro:

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

Vous devrez utiliser un autre nom, comme le fait la page liée:

void Clear_screen (void)

Les messages du compilateur indiquent également ceci:

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

C'est pourquoi les erreurs semblent être dans term.h - le développement de la macro y conduit.

5
muru