삼중자Trigraphs

C 소스 프로그램의 소스 문자 집합은 7비트 ASCII 문자 집합에 포함되지만 ISO 646-1983 고정 코드 집합의 상위 집합입니다.The source character set of C source programs is contained within the 7-bit ASCII character set but is a superset of the ISO 646-1983 Invariant Code Set. 삼중자 시퀀스를 사용하면 C 프로그램을 ISO(International Standards Organization) 고정 코드 집합만을 사용하여 쓸 수 있습니다.Trigraph sequences allow C programs to be written using only the ISO (International Standards Organization) Invariant Code Set. 삼중자는 컴파일러가 해당 문장 부호 문자로 대체하는 세 문자(두 개의 연속된 물음표로 시작)의 시퀀스입니다.Trigraphs are sequences of three characters (introduced by two consecutive question marks) that the compiler replaces with their corresponding punctuation characters. 삼중자는 특정 문장 부호 문자에 대한 편리한 그래픽 표현을 포함하지 않는 문자 집합이 사용되는 C 소스 파일에서 사용할 수 있습니다.You can use trigraphs in C source files with a character set that does not contain convenient graphic representations for some punctuation characters.

C++17의 언어에서는 삼중자가 제거됩니다.C++17 removes trigraphs from the language. 구현에서는 실제 원본 파일에서 기본 원본 문자 집합으로의 구현이 정의된 매핑의 일부분으로 삼중자가 계속 지원될 수도 있지만, 표준에 따라 구현에서 삼중자를 지원하지 않는 것이 좋습니다.Implementations may continue to support trigraphs as part of the implementation-defined mapping from the physical source file to the basic source character set, though the standard encourages implementations not to do so. C++14까지는 삼중자가 C에서처럼 지원됩니다.Through C++14, trigraphs are supported as in C.

Visual C++에서는 삼중자 대체가 계속 지원되지만 기본적으로는 사용할 수 없습니다.Visual C++ continues to support trigraph substitution, but it's disabled by default. 삼중자 대체를 사용하도록 설정하는 방법에 대한 자세한 내용은 /Zc:trigraphs(삼중자 대체)를 참조하세요.For information on how to enable trigraph substitution, see /Zc:trigraphs (Trigraphs Substitution).

다음 표에서는 9개의 삼중자 시퀀스를 보여 줍니다.The following table shows the nine trigraph sequences. 첫 번째 열에서 문장 부호 문자의 소스 파일에 있는 모든 항목은 두 번째 열의 해당 문자로 바뀝니다.All occurrences in a source file of the punctuation characters in the first column are replaced with the corresponding character in the second column.

삼중자 시퀀스Trigraph Sequences

삼중자Trigraph 문장 부호 문자Punctuation Character
??=??= #
??(??( [[
??/??/ \
??)??) ]]
??'??' ^
??<??< {{
??!??! ||
??>??> }}
??-??- ~

삼중자는 항상 단일 소스 문자로 처리됩니다.A trigraph is always treated as a single source character. 삼중자 변환은 문자열 리터럴 및 문자 상수에서 이스케이프 문자를 인식하기 전에 첫 번째 변환 단계에서 발생합니다.The translation of trigraphs takes place in the first translation phase, before the recognition of escape characters in string literals and character constants. 위의 표에 나와 있는 9개의 삼중자만 인식됩니다.Only the nine trigraphs shown in the above table are recognized. 다른 모든 문자 시퀀스는 변환되지 않고 유지됩니다.All other character sequences are left untranslated.

문자 이스케이프 시퀀스인 \?는 삼중자와 비슷한 문자 시퀀스가 잘못 해석되는 것을 방지합니다.The character escape sequence, \?, prevents the misinterpretation of trigraph-like character sequences. 이스케이프 시퀀스에 대한 자세한 내용은 이스케이프 시퀀스를 참조하세요. 예를 들어, What??! 문자열을 이 printf 문으로 출력하려고 하면(For information about escape sequences, see Escape Sequences.) For example, if you attempt to print the string What??! with this printf statement

printf( "What??!\n" );  

What|라는 문자열이 출력됩니다. 이는 ??!| 문자로 바뀌는 삼중자 시퀀스이기 때문입니다.the string printed is What| because ??! is a trigraph sequence that is replaced with the | character. 문자열을 올바르게 출력하려면 다음과 같이 문을 작성하십시오.Write the statement as follows to correctly print the string:

printf( "What?\?!\n" );  

printf 문에서 두 번째 물음표 앞에 있는 백슬래시 이스케이프 문자는 ??!가 삼중자로 잘못 해석되지 않게 합니다.In this printf statement, a backslash escape character in front of the second question mark prevents the misinterpretation of ??! as a trigraph.

참고 항목See Also

/Zc:trigraphs(삼중자 대체) /Zc:trigraphs (Trigraphs Substitution)
C 식별자C Identifiers