Это ошибка в компиляторе. Я предлагаю вам сообщить об ошибке на Microsoft Connect (хотя я бы не поспорил, что они исправят ее в ближайшее время). Это также происходит с реальными escape-последовательностями, такими как \n
или \x6e
, поэтому не имеет ничего общего с недопустимой escape-последовательностью \w
.
В VS 2008 и VS 2010 вывод этой программы:
#include <stdio.h>
int main(void)
{
int x[] = {'abn"', 'abn\"', 'ab\x6e"', 'ab\x6e\"'};
for (int i = 0; i < sizeof(x)/sizeof(x[0]); i++)
printf("%08x\n", x[i]);
return 0;
}
это:
61626e22
61626e22
61626e22
2261626e
Это показывает, что по какой-то странной причине компилятор перемещает кавычку (22) в начало символьной константы с несколькими символами, но только тогда, когда она экранирована и когда в константе есть другой экранированный символ.