На моей платформе:
build через эту конфигурацию make-файла:
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), кажется, две разные вещи. Для чего стоит, просматривая заголовочный файл,
#define NCURSES_PAIRS_T short
Странно, что они выбрали для этого подписанное количество.