我正在尝试显示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中存储数值似乎是错误的,但是它有效。我应该怎么做才能“正确”地做到这一点。
答案 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_ALTCHARSET
与x
相结合:
#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世纪初以来的一个区别。