1

キー イベントを ASCII 文字列、keysym、および ComposeStatus にマップする XLookupString を使用します。

int XLookupString(event_structure, buffer_return,  bytes_buffer, keysym_return, status_in_out)

XKeyEvent *event_structure;
char *buffer_return; /* Returns the resulting string (not NULL-terminated). Returned value of the function is the length of the string. */
int bytes_buffer;
KeySym *keysym_return;
XComposeStatus *status_in_out;

これが私のコードです:

char mykey_string;
int arg = 0;

------------------------------------------------------------

    case KeyPress:
        XLookupString( &event.xkey, &mykey_string, 1, 0, 0 );
        arg |= mykey_string;

ただし、ビット操作で 'char' 変数を使用すると、符号拡張によって予期しない結果が生じる可能性があります。これを防ぐことはできますか?

ありがとう

4

1 に答える 1

0

char必要に応じて明示signed的に指定unsignedする必要がありunsigned charます。これにより、コンパイラの設定に依存するのではなく、コードを読んでいる人に意図が明確になります。

c99 ドラフト標準の関連部分は、6.2.5 Types パラグラフ 15からのものです。

char、signed char、unsigned char の 3 つの型をまとめて文字型と呼びます。実装では、signed char または unsigned charと同じ範囲、表現、および動作を持つように char を定義する必要があります。

于 2013-08-25T10:51:55.450 に答える