каков диапазон восьмеричной escape-последовательности в c? - PullRequest
1 голос
/ 02 апреля 2012
Code
#include<stdio.h>
int main()
{
int i;
printf("%d \n",'\1');
printf("%d \n",'\022');
printf("%d ",'\555');
return 0;
}

Вывод: 1 18 109

Когда мы компилируем эту программу, компилятор gcc выдает предупреждение '\ 555', находится ли восьмеричная escape-последовательность вне диапазона?Что это за диапазон?

Ответы [ 2 ]

6 голосов
/ 02 апреля 2012

Из спецификации C99, §6.4.4.4, пункт 9:

Значение восьмеричной или шестнадцатеричной escape-последовательности должно быть в диапазон представимых значений для типа unsigned char для целочисленная символьная константа или тип без знака, соответствующий wchar_t для широкой символьной константы.

4 голосов
/ 02 апреля 2012

Верхний предел обычно составляет 255, что составляет '\377'. Это предполагает восьмибитный тип символа, который не гарантируется C, но является безопасным допущением в большинстве сред.

...