如何解决ncurses get_wch() 函数未声明
我尝试在 Archlinux 安装中检查 ncurses 库中 get_wch
函数的输出。
main.c:6:15: 警告:函数“get_wch”的隐式声明;
我像我的 GCC 命令行建议一样链接了 lib:
gcc main.c -lncursesw -o exec
我还检查了 ncurses 是否已安装:
core/ncurses 6.2-1 [已安装]
multilib/lib32-ncurses 6.2-1 [已安装]
当我在“usr/include”目录中列出头文件时,我看到在 lib 编译时生成的头文件允许我使用“widec”函数。
#include <curses.h>
int main() {
initscr();
int test = 0;
int result = get_wch(&test);
printf("Caractère : {} / Function code : {}\n",test,result);
endwin();
return 0;
}
我不明白如何使用这个库。可用的“文档”似乎对我不利...
解决方法
gcc 警告
main.c:6:15: warning: implicit declaration of function "get_wch";
告诉你没有 get_wch
的函数原型。 X/Open Curses 有条件地指定了所有 宽字符 函数(以避免破坏旧程序)。 ncurses manual page 中总结了这一点:
您还必须在标题中启用宽字符功能 为宽字符库编译时使用的文件 扩展(宽字符)函数。使能的符号 自 XSI Curses,第 4 期以来,这些功能发生了变化:
-
最初,宽字符特性需要符号
_XOPEN_SOURCE_EXTENDED
但这仅对 XPG4 有效 (1996)。 -
后来被认为与定义的
_XOPEN_SOURCE
相冲突 到 500。 -
截至 2018 年年中,此实现中没有任何功能 要求
_XOPEN_SOURCE
功能大于 600。但是, X/Open Curses,Issue 7 (2009) 建议将其定义为 700。 -
或者,您可以通过定义启用该功能
NCURSES_WIDECHAR
需要注意的是其他一些头文件 比curses.h 可能需要_XOPEN_SOURCE
的特定值 (或系统特定的符号)。
get_wch
的原型使用 wint_t
(可以容纳“宽字符”的整数,例如 Unicode)。 manual page 列出了宽字符 ncursesw 库(和函数原型)中使用的这些类型:cchar_t
、{{ 1}} 和 wchar_t
如果您想使用任何这些类型的函数原型,您的程序应该打开该功能。正如前面提到的 before,定义 wint_t
是最简单的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。