В C/С++ есть четыре специальных символа без алфавита: одиночная кавычка \'
, двойная кавычка \"
, обратная косая черта \\
и вопросительный знак \?
. Это, по-видимому, потому, что они имеют особые значения. '
для одиночных char
, "
для строковых литералов, \
для escape-последовательностей, но почему ?
один из них?
Я прочитал таблицу escape-последовательностей в учебнике сегодня, и я понял, что у меня никогда побег ?
раньше и никогда не возникал проблемы с ним, просто чтобы убедиться, что я его протестировал под gcc:
#include <stdio.h>
int main(void)
{
printf("question mark ? and escaped \?\n");
return 0;
}
и версия С++:
#include <iostream>
int main(void)
{
std::cout << "question mark ? and escaped \?" << std::endl;
return 0;
}
Оба выхода программ: question mark ? and escaped ?
У меня есть два вопроса:
- Почему
\?
один из символов escape-последовательности? - Почему не выполняется экранирование
?
работает нормально, там даже не появляется предупреждение.
Прежде чем я собираюсь задать этот вопрос, я нашел ответ сам, так как я не нашел дубликата в SO, я решил опубликовать его в стиле Q & A.
Более интересным фактом является то, что экранированный \?
может использоваться так же, как и ?
на некоторых других языках, я тестировался в Lua/Ruby, это правда, даже если я не нашел это документированным.