2016-10-05 21 views
1

構造体から引き出している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の文字が正しく表示されない
#include <ncurses.h> 
struct TEST_STRUCT 
{ 
    char nCharacter;  // Where I want to store variable for printed character 
    short nTestNumber; // Other stuff in struct 
}; 
TEST_STRUCT sTestData[] = { 
    { '.', 1 },   // Period 
    { ',', 2 },   // Comma 
    { ACS_VLINE, 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 
    } 
     refresh(); 
    endwin(); 
    return 0; 
} 

は、少し周りをいじりの後、私は次の作品を見つけましたこれは間違っているようですが、うまくいきます。それを「正しく」実行するには、どうしたらいいですか?

答えて

0

最初の例の問題点は、シンボルACS_VLINEが、静的に初期化されていない配列内のエントリであることです(その実際の内容はinitscrに依存します)。奇妙なことに、g ++は警告しませんが、gcc -Wallは警告します。後者の場合の定数はxと組み合わせるA_ALTCHARSETに相当する、異なる

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

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

として、2000年代初頭以来、区別されています
#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で暗示されています。

関連する問題