私は以下のコードをコンパイルしようとします:
#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:
実際、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
にあるようです-マクロ展開がそこにあります。