이미 언급 한대로 ??!??!
본질적으로 두 가지이다 trigraph를 ( ??!
그리고 ??!
다시)에 대체 번역 얻을 함께 헝클어 ||
즉, 논리적 OR 전처리에 의해.
모든 3 점을 포함하는 다음 표는 대체 3 점 조합을 명확하게하는 데 도움이됩니다.
Trigraph Replaces
??( [
??) ]
??< {
??> }
??/ \
??' ^
??= #
??! |
??- ~
출처 : C : A Reference Manual 5th Edition
같은 모양이있는 trigraph 라 그래서 ??(??)
결국에 매핑합니다 []
, ??(??)??(??)
대체 얻을 것이다 [][]
등등, 당신은 아이디어를 얻을.
전처리 과정에서 삼중 그래프가 대체되므로 cpp
바보 같은 trigr.c
프로그램을 사용하여 출력을 직접 볼 수 있습니다 .
void main(){ const char *s = "??!??!"; }
그리고 그것을 처리 :
cpp -trigraphs trigr.c
당신은 콘솔 출력을 얻을 것이다
void main(){ const char *s = "||"; }
알 수 있듯이 옵션 -trigraphs
을 지정해야합니다. 그렇지 않으면 cpp
경고가 표시됩니다. 이것은 삼분법이 어떻게 과거의 것이며 현대에 가치가없는 것을 의미합니다 .
3 부작의 도입에 대한 이론적 근거 는 ISO / IEC 646의 히스토리 섹션을 볼 때 더 잘 이해됩니다 .
ISO / IEC 646과 그 이전의 ASCII (ANSI X3.4)는 통신 산업의 문자 인코딩에 관한 기존 관행을 크게 승인했습니다.
ASCII는 영어 이외의 언어에 필요한 여러 문자를 제공하지 않았으므로 덜 사용되는 일부 문자를 필요한 문자로 대체하는 여러 가지 국가 변형이 만들어졌습니다 .
(강조 광산)
따라서 본질적으로 일부 필요한 문자 (삼중 그래프가있는 문자)가 특정 국가 변형으로 대체되었습니다. 이것은 다른 변형이 여전히 가지고있는 문자로 구성된 삼중 그래프를 사용하여 대체 표현으로 이어집니다.
!ErrorHasOccurred() ??!???! HandleError();
컴파일 할 것으로 기대 하십니까? 그렇습니다??!
???
!
. 요점을 증명?