微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ncurses get_wch() 函数未声明

如何解决ncurses get_wch() 函数未声明

我尝试在 Archlinux 安装中检查 ncurses 库中 get_wch 函数输出

但是当我调用这个函数时,我得到了这个 GCC 错误

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 举报,一经查实,本站将立刻删除。