c中八进制转义序列的范围是多少?

Luv*_*Luv 1 c escaping octal

Code
#include<stdio.h>
int main()
{
int i;
printf("%d \n",'\1');
printf("%d \n",'\022');
printf("%d ",'\555');
return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:1 18 109

当我们编译这个程序然后gcc编译器发出警告'\ 555'是八进制转义序列超出范围?这个范围是多少?

Has*_*kun 6

根据C99规范,§6.4.4.4第9段:

八进制或十六进制转义序列的值应在用于为整数字符常量,或者对应于用于wchar_t的宽字符常数的无符号类型的类型无符号的字符表示的值的范围内.


Mar*_*tos 5

上限通常为 255,即'\377'。这假定了一个 8 位 char 类型,C 不保证这一点,但在大多数环境中这是一个安全的假设。