C/C++에서 "\"?가 이스케이프 시퀀스인 이유는 무엇입니까?
C/C++에서 이스케이프해야 하는 특수 비알파벳 문자가 4개 있습니다. 하나의 따옴표\'
이중 따옴표\"
백슬래시\\
물음표\?
그것은 분명히 그들이 특별한 의미를 가지고 있기 때문입니다. '
독신으로char
,"
문자열 리터럴의 경우,\
탈출 시퀀스를 위해, 하지만 왜??
그들 중 한명?
오늘 교과서에서 탈출 순서표를 읽었는데 탈출한 적이 없다는 걸 깨달았어요?
문제가 발생한 적이 없습니다.만약을 위해 GCC에서 테스트했습니다.
#include <stdio.h>
int main(void)
{
printf("question mark ? and escaped \?\n");
return 0;
}
그리고 C++ 버전:
#include <iostream>
int main(void)
{
std::cout << "question mark ? and escaped \?" << std::endl;
return 0;
}
두 프로그램 모두 출력:question mark ? and escaped ?
그래서 두 가지 질문이 있습니다.
- 이유는
\?
탈출 시퀀스 캐릭터 중 하나? - 탈출이 불가능한 이유
?
잘 작동합니까?경고조차 없습니다.
더 흥미로운 사실은 탈옥자들이\?
와 동일하게 사용할 수 있습니다.?
일부 다른 언어로도.Lua/Ruby에서 테스트를 해봤는데, 문서화되어 있지는 않았지만 사실입니다.
이유는
\?
탈출 시퀀스 캐릭터 중 하나?
특별하기 때문입니다.답은 Trigraph로 이어지고, C/C++ 전처리기는 다음의 세 개의 문자 시퀀스를 해당하는 단일 문자로 바꿉니다(C11 §5.2.1.1 및 C++11 §2.3).
Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Replacement: [ ] { } # \ ^ | ~
삼각형은 현재 거의 쓸모가 없으며 주로 난독화 목적으로 사용됩니다.IOCC에서 몇 가지 예를 볼 수 있습니다.
GCC는 기본적으로 삼각형을 지원하지 않으며 옵션이 없는 한 코드에 삼각형이 있으면 경고합니다.-trigraphs
3이 활성화됩니다.아래에-trigraphs
옵션, 두 번째\?
는 다음 예에서 유용합니다.
printf("\?\?!\n");
출력은 다음과 같습니다.|
한다면?
탈출할 수 없습니다.
삼각형에 대한 자세한 내용은 레거시 코드의 암호화 줄 "?!?!"를 참조하십시오.
탈출이 불가능한 이유
?
잘 작동합니다경고조차 없습니다.
왜냐면?
(및 이중 따옴표)"
)는 다음과 같은 표준으로 나타낼 수 있습니다.
C11 § 6.4.4.4 문자 상수 섹션 4
이중 인용문
"
및 물음표?
그들 자신이나 탈출 시퀀스로 표현할 수 있습니다.\"
그리고.\?
각각, 하지만 단음절은.'
그리고 백슬래시\
각각 탈출 시퀀스로 표시되어야 합니다.\'
그리고.\\
.
C++에서 유사함:
C++11 § 2.13.2 문자 리터럴 섹션 3
특정 비그래픽 문자, 단일 따옴표
’
따옴표"
?
백슬래시 그고백시래슬리.\
6165 6에 수 . 따옴표"
음표물?
시퀀스로 될 수도 있습니다.\"
그리고.\?
각각, 하지만 하나의 인용구.’
백슬래시 그고백시래슬리.\
시퀀스 탈 시 표 합 니 어 야 다 되 시 출 퀀 로 스 표시됩니다.\’
그리고.\\
각각 다음과 같다.백슬래시 뒤에 오는 문자가 지정된 문자가 아닌 경우 동작이 정의되지 않습니다.이스케이프 시퀀스는 단일 문자를 지정합니다.
언급URL : https://stackoverflow.com/questions/19374878/why-is-an-escape-sequence-in-c-c
'programing' 카테고리의 다른 글
web.config>config>config>runtime>assemblyBinding에서 생성된 항목의 의미/이유는 무엇입니까? (0) | 2023.06.14 |
---|---|
쿠키 존재 여부 확인 (0) | 2023.06.14 |
두 개의 RMarkdown(.Rmd) 파일을 단일 출력으로 결합하는 방법은 무엇입니까? (0) | 2023.06.14 |
C/C++ 라이브러리를 여러 클라이언트 언어로 사용할 수 있도록 설계하는 방법은 무엇입니까? (0) | 2023.06.14 |
C: 다차원 어레이의 메모리를 올바르게 확보 (0) | 2023.06.09 |