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

C \xFF不在转义序列的可表示值范围内?,c,C,基于此: 八进制或十六进制转义序列的值应为 对象的类型unsigned char的可表示值的范围 整数字符常量,或与 wchar\t用于宽字符常量 字节=8位的八进制序列范围为[0255] 但他们还举了一个例子: 示例3即使将8位用于具有char类型的对象,构造“\x123”也指定一个仅包含一个字符的整数字符常量 这不是违反了第一个约束,即超过255的\x123。ideone发出警告,并将文字视为\x23 int main(void) { // your code goes here

基于此:

八进制或十六进制转义序列的值应为 对象的类型unsigned char的可表示值的范围 整数字符常量,或与 wchar\t用于宽字符常量

字节=8位的八进制序列范围为[0255]

但他们还举了一个例子:

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


这不是违反了第一个约束,即超过255的
\x123

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

因此,无论你引用什么都不是很好

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

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

Yes
'\x123'
都违反了当
char
为8位时的规则,因为
'\x123'
超过了255位

这是一个不应该使用的例子。C规范示例接着说:

。。。要指定一个整数字符常量,该常量包含值为
'\x12'
'3'
的两个字符,可以使用结构
'\0223'
,因为八进制转义序列在三个八进制数之后终止。(此两个字符整数字符常量的值由实现定义。)C11§6.4.4.14

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



换句话说,十六进制转义序列直到耗尽所有十六进制字符才停止。在8位
char
系统上,它不限于2个字符。

Yes
'\x123'
违反了当
char
是8位的
'\x123'
时超过255的规则

这是一个不应该使用的例子。C规范示例接着说:

。。。要指定一个整数字符常量,该常量包含值为
'\x12'
'3'
的两个字符,可以使用结构
'\0223'
,因为八进制转义序列在三个八进制数之后终止。(此两个字符整数字符常量的值由实现定义。)C11§6.4.4.14

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



换句话说,十六进制转义序列直到耗尽所有十六进制字符才停止。在8位
char
系统上,不限于2个字符。

对不起,我举错了示例。对不起,我举错了示例。“你引用的内容不是很好”似乎是C规范。“你引用的内容不是很好”似乎是C规范。