Ответ 1
\?
является escape-последовательность, в точности эквивалентная ?
, и используется для выхода из триграфов:
#include <stdio.h>
int main(void) {
printf("%s %s", "??=", "?\?="); // output is # ??=
}
В C, почему эти две части кода дают один и тот же результат?
#include<stdio.h>
int main(void)
{
const char c='\?';
printf("%c",c);
}
а также
#include<stdio.h>
int main(void)
{
const char c='?';
printf("%c",c);
}
Я понимаю, что обратная косая черта используется для создания кавычек ("
или '
) и обратной косой черты, очевидной для компилятора, когда мы используем printf(), но почему это работает для "?"?
\?
является escape-последовательность, в точности эквивалентная ?
, и используется для выхода из триграфов:
#include <stdio.h>
int main(void) {
printf("%s %s", "??=", "?\?="); // output is # ??=
}
Цитирование C11
, глава §6.4.4.4p4
The double-quote
"
и question-mark?
are representable either by themselves or by the escape sequences\"
и\?
, respectively, but...
.
Акцент мой
Таким образом, escape-последовательность \?
обрабатывается так же, как и ?
.
Потому что '\?'
является допустимым кодом эвакуации и равен вопросительному знаку.
когда вы определяете char
или string
компилятор анализирует обратную косую черту в этом char
или string
как escape-последовательность.
**
the simple answer of your question is
\? means ?. instead of using \? you can using ? .
\? is escape representation and ? is character representation means both are same.
Я связал изображение, чтобы вы поняли его более легко..
**
"нажмите здесь, чтобы посмотреть изображение" → в этом изображении вам нужно найти \? в символе Escape