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:
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.