1

我使用 XLookupString 将键事件映射到 ASCII 字符串、keysym 和 ComposeStatus。

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可以是任何一个signedunsigned如果你需要unsigned char你应该明确地指定它,它让那些阅读你编码你的意图的人清楚,而不是依赖于编译器设置。

c99 标准草案的相关部分来自6.2.5 Types 第 15 段

char、signed char 和 unsigned char 这三种类型统称为字符类型。实现应将 char 定义为与有符号字符或无符号字符具有相同的范围、表示和行为

于 2013-08-25T10:51:55.450 回答