gcc 隐式声明“mvaddwstr”函数,尽管显式链接了ncursesw(ncurses的广泛变体)

3z6pesqy  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(170)

平台

Windows 11 + GCC编译器17(MINGW2)

编译命令

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

MINGW2包含目录

C:\msys64\mingw64\include
C:\msys64\mingw64\include\ncurses
C:\msys64\mingw64\include\ncursesw

代码

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

#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

尽管有警告,程序工作正常。但是,我还是想解决警告。

尝试解决方案

我尝试在代码中包含来自ncurseswcurses.h文件。但是,警告仍然存在。

#include <ncursesw/curses.h>

我还尝试在编译命令中将include添加到ncursesw目录,但警告仍然存在。

gcc -o main.exe main.c -IC:\msys64\mingw64\include\ncurseswncursesw -lncursesw; ./main.exe
ttisahbt

ttisahbt1#

解决方案

this solution中所述,我只需使用NCURSES_WIDECHAR启用宽字符支持。

修复编译命令

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

相关问题