出于某种原因,-std = C99是保持GCC无法看到)功能wborder_set的声明((其居<curses.h>
)我使用-std时= C99
#include <curses.h>
#include <locale.h>
int main(int argc, char* argv[]){
initscr(); // start ncurses
cbreak(); // don't wait for lf to getch
noecho(); // don't copy entered characters
nonl(); // use /r/l
clear(); // clear the screen!
setlocale(LC_CTYPE, "");
int ySize, xSize;
getmaxyx(stdscr, ySize, xSize);
WINDOW *upperWin = newwin(ySize, xSize, 0, 0);
// magic utf encodings for window border
wborder_set(upperWin, "\u1234", "\u1234", "\u1234", "\u1234",
"\u1234", "\u1234", "\u1234", "\u1234");
wrefresh(upperWin);
getch();
return 0;
}
只获得了一个隐含的声明错误
用gcc test.c -lncursesw -o cursestest
编译正常!但是,如果我编译
gcc test.c -std=c99 -lncursesw -o cursestest
它回复,
cursescurses.c: In function ‘main’: cursescurses.c:18:7: warning: implicit declaration of function ‘wborder_set’ [-Wimplicit-function-declaration] wborder_set(upperWin, "\u1234", "\u1234", "\u1234", "\u1234",
这使我相信,我不能相信这是正确的连接wborder_set。
为什么会发生这种情况?
aha! “ ”以下支持宽字符(多字节)的EXTENDED XSI Curses调用尚未实现:... wborder_set()...“ 所以即使函数是在手册页中定义的,它也不会实际上存在。 D'哦。 –
在包含任何头以显示声明之前,您必须定义'_XOPEN_SOURCE_EXTENDED'。 – cremno
这是在Linux上吗?我发现在Linux上,像-std = c99这样的选项倾向于将头文件限制为最小的c99模式,并禁用任何可能的扩展,如各种POSIX功能。 – Rhialto