Как скомпилировать программы, использующие term.h?
Я пытаюсь скомпилировать код ниже:
#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;
}
Эта программа проверяет функцию, которая использует 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();
^
Более того, когда я явно включаю 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();
^
Согласно вышеизложенному, term.h
Заголовок имеет некоторые ошибки внутри, что-то я не верю.
Так что мне нужно установить еще несколько пакетов или настроить некоторые параметры для успешного компиляции кода?
PS:
- Пример кода отсюда
- Моя версия Ubuntu 14.04
1 ответ
В самом деле, clear_screen
это макрос:
$ grep clear_screen /usr/include/term.h
#define clear_screen CUR Strings[5]
Вам нужно будет использовать другое имя, как на связанной странице:
void Clear_screen (void)
Сообщения компилятора также утверждают это:
clear_screen_UNIX.c:9:6: note: in expansion of macro ‘clear_screen’
Вот почему ошибки, кажется, в term.h
- расширение макроса ведет туда.