gpt4 book ai didi

c - 为什么 init_pair 在一半的 COLOR_PAIRS 范围内失败?

转载 作者:太空宇宙 更新时间:2023-11-04 02:23:44 28 4
gpt4 key购买 nike

在我的平台上:

  • OSX Mojave 10.14.2
  • 来自 Homebrew 的 ncurses:

    $ brew info ncurses
    ncurses: stable 6.1 (bottled) [keg-only]

通过这个 makefile 配置构建:

pkgenv=PKG_CONFIG_PATH=/usr/local/opt/ncurses/lib/pkgconfig pkg-config ncursesw

flags=-Wall -std=c17 -ggdb
cflags=$(flags) $(shell $(pkgenv) --cflags)
ldflags=$(flags) $(shell $(pkgenv) --libs)

这个最小的可重现示例失败了:

#include <assert.h>
#include <ncursesw/ncurses.h>

int main() {
assert(NULL != initscr());
assert(has_colors());
assert(can_change_color());

assert(ERR != start_color());
assert(COLOR_PAIRS == 0x10000);
assert(COLORS == 256);
assert(ERR != init_pair(1, 9, 10));
assert(ERR != init_pair(0x7FFE, 9, 10));
// OK up to here

// Fails
assert(ERR != init_pair(0x7FFF, 9, 10));

endwin();
puts("OK");
return 0;
}

但是为什么? COLOR_PAIRS 报告的内容 (65536) 和 init_pair 接受的内容 (1-32766) 似乎是两件不同的事情。为了它的值(value),浏览头文件,

#define NCURSES_PAIRS_T short

奇怪的是他们为此选择了签名数量。

最佳答案

standard type颜色对是(有符号的)short,在大多数机器上是 16 位。原因是它可以追溯到 80 年代,当时空间(和可用颜色)更为有限。

ncurses 6.1具有允许 32 位值的扩展(例如,使用 init_extended_pair ),brewformula似乎允许,尽管到目前为止还没有人对此发表评论。

Portability 中所述init_pair 手册页的部分

X/Open Curses does not specify a limit for the number of colors and color pairs which a terminal can support. However, in its use of short for the parameters, it carries over SVr4's implementation detail for the compiled terminfo database, which uses signed 16-bit numbers. This implementation provides extended versions of those functions which use short parameters, allowing applications to use larger color- and pair- numbers.

为了您的娱乐,截图here使用ncurses 6.1的扩展号码功能

关于c - 为什么 init_pair 在一半的 COLOR_PAIRS 范围内失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54047641/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com