В 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, это правда, даже если я не нашел это документированным.