\ xFF不在转义序列的可表示值范围内?

时间:2017-03-09 00:38:26

标签: c

基于此:

  

八进制或十六进制转义序列的值应在   for的unsigned char类型的可表示值范围   整数字符常量,或对应的无符号类型   wchar_t用于宽字符常量。

对于字节= 8位,八进制序列范围为[0,255]。

但他们进一步使用了一个例子:

  

示例3即使对于具有char类型的对象使用8位,构造“ \ x123”指定仅包含一个字符的整数字符常量,

这是否违反第一个约束\x123超过255?

2 个答案:

答案 0 :(得分:2)

'\x123'违反了char为8位且'\x123'超过255.

这是使用的示例。 C规范的例子继续说:

  

...要指定包含值为'\x12''3'的两个字符的整数字符常量,可以使用构造'\0223',因为八进制转义序列在之后终止三位八进制数字。 (这个双字符整数字符常量的值是实现定义的。)C11§6.4.4.414

'\xFF'在范围内,但'\xFF$',其中$是一些十六进制字符,不在范围内。

换句话说,十六进制转义序列在排除所有十六进制字符之前不会停止。在8位char系统上,它不限于2个字符。

答案 1 :(得分:0)

ideone发出警告并将文字视为\ x23

int main(void) {
    // your code goes here
    char x = '\x123';
    printf("%d\n",x);
    return 0;
}

prog.c:5:11: warning: hex escape sequence out of range
  char x = '\x123';
           ^~~~~~~

Success time: 0 memory: 9432 signal:0
35

所以无论你引用的是什么都不是很好