基于此:
八进制或十六进制转义序列的值应在 for的unsigned char类型的可表示值范围 整数字符常量,或对应的无符号类型 wchar_t用于宽字符常量。
对于字节= 8位,八进制序列范围为[0,255]。
但他们进一步使用了一个例子:
示例3即使对于具有char类型的对象使用8位,构造“ \ x123”指定仅包含一个字符的整数字符常量,
这是否违反第一个约束\x123
超过255?
答案 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
所以无论你引用的是什么都不是很好