c语言 - 尽管 ncursesw(ncursesw(ncurses 的广泛变体)被明确链接,但"mvaddwstr"函数的隐式声明



平台

Windows 11+GCC编译器17(MINGW2)

编译命令

gcc -o main.exe main.c -lncursesw ; ./main.exe 

MINGW2包含目录

C:msys64mingw64include
C:msys64mingw64includencurses
C:msys64mingw64includencursesw

代码

它只是在窗口周围画一个边框。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <ncurses/curses.h>
#include <wchar.h>
int main() 
{
initscr();
int row = 0;
int col = 0;
getmaxyx(stdscr, row, col);
wchar_t * square = L"u2588";
for (int i = 0; i < row; i++)
{
if (i == 0 || i == row - 1)
{
for (int j = 0; j < col; j++)
{
mvaddwstr(i, j, square);   
}
}
else 
{
mvaddwstr(i, 0, square);
mvaddwstr(i, col - 1, square);
}
}

refresh();
getch();
endwin();
return 0;
}

问题

编译器似乎认为mvaddwstr是隐式声明的。但是,我已经在编译命令中显式地链接了ncursesw库(而不是常规的ncurses)。

main.c:76:17: warning: implicit declaration of function 'mvaddwstr'; did you mean 'mvaddstr'? [-Wimplicit-function-declaration]
76 |                 mvaddwstr(i, j, square);
|                 ^~~~~~~~~
|                 mvaddstr

尽管有警告,该程序运行良好。不过,我还是想解决这一警告。

尝试的解决方案

我已经尝试将ncursesw中的curses.h文件包含在代码中。但是,警告仍然存在。

#include <ncursesw/curses.h>

我还尝试在compilation命令中向ncursesw目录添加include,但警告仍然存在。

gcc -o main.exe main.c -IC:msys64mingw64includencurseswncursesw -lncursesw; ./main.exe
  • ncursesw函数未声明
  • 使用ncurses打印宽unicode字符

解决方案

正如这个解决方案中所概述的,我只需要使用NCURSES_WIDECHAR启用广泛的字符支持。

固定编译命令

gcc -o main.exe main.c -DNCURSES_WIDECHAR=1 -lncursesw ; ./main.exe 

相关内容

  • 没有找到相关文章

最新更新