Недавно появилась надпись Ask Ubuntu, где OP пыталась скомпилировать программу, которая включала term.h
. Когда код имел #include <term.h>
, ошибки были:
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();
Затем OP включил полный путь к term.h
(#include "/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();
Эти сообщения ясно указывают на то, что проблема связана с расширением макроса.
Я тоже сам проверил результаты. Интересно, почему GCC выпустил гораздо лучшие ошибки, когда был дан полный путь. Могу ли я заставить его создавать похожие сообщения с синтаксисом системы, а также?
Я использую GCC 4.9.2, и я подозреваю, что OP использует GCC 4.8.2 (учитывая версию Ubuntu).