수색…


비고

모든 전처리 기가 trigraph 시퀀스 처리를 지원하는 것은 아닙니다. 일부 컴파일러는 처리를 위해 추가 옵션 또는 스위치를 제공합니다. 다른 사람들은 별도의 프로그램을 사용하여 삼부작을 변환합니다.

당신이 명시 적으로 (사용 그렇게하도록 요청하지 않는 한 GCC 컴파일러는이를 인식하지 못하는 -trigraphs , 사용을 가능하게 -Wtrigraphs 의 일부 -Wall trigraph를에 대해 경고를 얻기 위해).

현재 사용되는 대부분의 플랫폼이 C에서 사용되는 단일 문자의 전체 범위를 지원하기 때문에, 삼중 그래프보다는 자필 문자가 선호되지만, 다중 문자 문자 시퀀스의 사용은 일반적으로 권장되지 않습니다.

또한 우발적 인 trigraph 사용에주의하십시오 ( puts("What happened??!!"); ).

삼자

기호 [ ] { } ^ \ | ~ # 는 C 프로그램에서 자주 사용되지만 1980 년대 후반에 사용 된 코드 세트 (예 : 스칸디나비아 국가의 ISO 646 변형)는 ASCII 문자 위치가 자국어 변종 문자 (예 : £ 영국에서는 # , 덴마크에서는 { } { } | \ 에 대해 Æ Å æ å ø Ø , EBCDIC에는 ~ 이 없음). 즉,이 세트를 사용하는 시스템에 C 코드를 작성하는 것이 어려웠습니다.

이 문제를 해결하기 위해 C 표준에서는 세 문자 조합을 사용하여 삼중 문자라는 단일 문자를 생성 할 것을 제안했습니다. 삼중 문자는 세 문자의 시퀀스로, 처음 두 개는 물음표입니다.

다음은 # , {} 대신에 삼중 시퀀스를 사용하는 간단한 예입니다.

??=include <stdio.h>

int main()
??<
    printf("Hello World!\n");
??>

이것은 C 전처리 기가 코드가 작성된 것처럼 삼자체를 해당하는 단일 문자로 대체하여 변경됩니다.

#include <stdio.h>

int main()
{
    printf("Hello World!\n");
}
삼위 일체 동등한
?? = #
?? / \
?? ' ^
?? ( [
??) ]
??! |
?? < {
??> }
?? - ~ ~

trigraph는 문제가 있습니다 ??/ 예를 들어, ??/ 는 백 슬래시이며 주석의 연속 행의 의미에 영향을 줄 수 있기 때문에 문자열 및 문자 리터럴 (예 : '??/??/' 는 하나의 단일 문자입니다. 문자, 백 슬래시).

Digraphs

C99

1994 년에 다섯 개의 삼중보기에 대한 더 읽기 쉬운 대안이 제공되었습니다. 이들은 두 문자만을 사용하며 이중 그래프라고합니다. 삼중 그래프와 달리 이진 그래프는 토큰입니다. 다른 토큰 (예 : 문자열 리터럴 또는 문자 상수)에서 유성선이 발생하면 유성음으로 간주되지 않고 그대로 유지됩니다.

다음은 다이 그래프 시퀀스를 처리하기 전후의 차이를 보여줍니다.

#include <stdio.h>

int main()
<%
    printf("Hello %> World!\n"); /* Note that the string contains a digraph */
%>

어느 것이 다음과 같이 취급 될 것입니다 :

#include <stdio.h>

int main()
{
    printf("Hello %> World!\n"); /* Note the unchanged digraph within the string. */
}
디 그래프 동등한
<: [
:> ]
<% {
%> }
% : #


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow