在位操作中使用'char'变量

时间:2013-08-25 09:49:50

标签: c xlib

我使用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'变量,符号扩展会产生意外结果。 我有可能阻止这个吗?

由于

1 个答案:

答案 0 :(得分:0)

char可以是signedunsigned,所以如果您需要unsigned char,您应该明确指定它,它会让那些阅读您的人明确表达您的意图依赖编译器设置。

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

  

共同调用char,signed char和unsigned char这三种类型   字符类型。实现应定义char具有相同的范围,   表示,行为为signed char或unsigned char