C \xFF不在转义序列的可表示值范围内?
基于此: 八进制或十六进制转义序列的值应为 对象的类型unsigned char的可表示值的范围 整数字符常量,或与 wchar\t用于宽字符常量 字节=8位的八进制序列范围为[0255] 但他们还举了一个例子: 示例3即使将8位用于具有char类型的对象,构造“\x123”也指定一个仅包含一个字符的整数字符常量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
这不是违反了第一个约束,即超过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规范。