在struct中使用ncurses扩展字符

时间:2016-10-05 18:45:27

标签: c++ struct character-encoding ncurses

我正在尝试显示ncurses扩展字符,我正在从结构中提取。

当我尝试使用时:

#include <ncurses.h>
struct TEST_STRUCT
{
    int     nCharacter;         // Where I want to store variable for printed character
    short   nTestNumber;    // Other stuff in struct
};
TEST_STRUCT sTestData[] = {
    { '.', 1 },     // Period
    { ',', 2 },     // Comma
    { 4194424, 1 }  // Vertical Line
};
int main(void)
{
    initscr();
    clear();
    for( int n = 0; n < 3; n++)
    {
        addch(sTestData[n].nCharacter);     // print the characters in the struct
    }
    endwin();
    return 0;
}

ACS_VLINE字符显示不正确,但在搞乱一点后,我发现以下工作:

{{1}}

在int中存储数值似乎是错误的,但是它有效。我应该怎么做才能“正确”地做到这一点。

1 个答案:

答案 0 :(得分:1)

第一个例子的问题是符号ACS_VLINE是数组中的一个条目,它没有静态初始化(它的实际内容取决于initscr)。奇怪的是,g ++没有对此发出警告,但是gcc -Wall会发出警告。

这就是这样的定义:

#define NCURSES_ACS(c)  (acs_map[NCURSES_CAST(unsigned char,c)])

#define ACS_VLINE       NCURSES_ACS('x') /* vertical line */

第二种情况下的常量不同,相当于A_ALTCHARSETx相结合:

#define NCURSES_ATTR_SHIFT       8
#define NCURSES_BITS(mask,shift) ((mask) << ((shift) + NCURSES_ATTR_SHIFT))

#define A_ALTCHARSET    NCURSES_BITS(1UL,14)

正如changelog from 2003所暗示的那样,这是自21世纪初以来的一个区别。