在此基礎上: xFF不在轉義序列的可表示值範圍內?
一個八進制或十六進制轉義序列的值應在 範圍爲unsigned char類型表示的值的用於 整數字符常量,或對應於 wchar_t的無符號的類型爲寬字符常量。
字節= 8位的八進制序列範圍爲[0,255]。
但進一步他們使用的一個示例:
實施例3即使八位用於具有類型char,施工「\ X123」對象指定只含有一個字符的整數字符常數,
是不是違反了第一個約束作爲\x123
超過255?
在此基礎上: xFF不在轉義序列的可表示值範圍內?
一個八進制或十六進制轉義序列的值應在 範圍爲unsigned char類型表示的值的用於 整數字符常量,或對應於 wchar_t的無符號的類型爲寬字符常量。
字節= 8位的八進制序列範圍爲[0,255]。
但進一步他們使用的一個示例:
實施例3即使八位用於具有類型char,施工「\ X123」對象指定只含有一個字符的整數字符常數,
是不是違反了第一個約束作爲\x123
超過255?
是'\x123'
是違反的時候char
爲8〜位爲'\x123'
,其超過了255.
這是不是使用的示例。在C時的參數示例接着說:
...指定包含兩個字符,其值
'\x12'
和'3'
,施工'\0223'
可以使用整數字符常量,因爲一個八進制轉義序列之後終止三個八進制數字。 (這兩個字符的整數字符常數的值是實現德音響定義。)C11§6.4.4.414
'\xFF'
是在範圍內,但'\xFF$'
,其中$
是一些十六進制字符,不在範圍內。
換句話說,一個十六進制轉義序列不會停止,直到用盡所有十六進制字符。在8位的char
系統上,不限於2個字符。
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
所以無論你是引用不是很好
「無論你引用的是不是很好」似乎是C規範。 – chux
對不起,我採取了錯誤的例子。 – Sabrina