기타 강좌

3-5-라.3중 문자

3중 문자(Trigraph)란 세 개의 연속된 문자를 하나의 문자로 대체하는 표현이다. 잘 알다시피 C 언어는 미국에 의해 만들어졌고 그러다보니 자기네 나라의 문자 코드인 ASCII표에 정의되어 있는 { } [ ] 문자들을 별 생각없이 구두점으로 정의하고 있다. 그런데 유럽의 몇 개 국가들은 영어에 없는 자신의 고유한 글자(움라우트 등)를 표현하기 위해 이 문자 코드에 다른 문자를 할당해서 사용하고 있으며 그러다 보니 이런 나라의 키보드에는 ASCII표에 있는 9개의 문자들이 없을 수도 있다. 우리 나라의 경우도 문자를 원화 표시인 로 다르게 표시하고 있지 않은가?

그래서 C표준은 C에서 사용할 수 있는 문자들을 모든 나라에 공통적인 영문자, 숫자와 몇 가지 기호만으로 제한하고 있으며 나머지 문자들은 표준에 있는 문자들의 조합으로 입력할 수 있는 방법을 제공해야 할 필요가 생긴 것이다. 이런 이유로 C 표준은 3중 문자를 정의하고 있다. 물론 키보드에 이런 문자들이 있다면 굳이 3중 문자를 쓰지 않아도 된다. 3중 문자의 종류는 다음과 같다.

 

3 문자

대체 문자

3 문자

대체 문자

??=

#

??/

??'

^

??!

|

??(

[

??)

]

??<

{

??<

}

??-

~

 

 

 

??로 시작하는 세 개의 문자를 연속으로 사용하면 이 문자는 컴파일러가 토큰을 분석하는 과정에서 대체 문자로 바뀐다. 다음 예제는 3중 문자로 작성한 것이다. 굉장히 이상해 보이지만 잘 컴파일되며 Trigraph Test #1. num is 2를 출력한다.

 

: Trigraph

??=include <Turboc.h>

 

void main()

??<

int ar[5]=??<1,2,3,4,5??>;

     printf("Trigraph Test ??=1. num is %dn",ar??(1??));

??>

 

{ } 괄호 대신 ??< ??>괄호를 사용할 수 있고 배열을 표기할 때도 [ ] 대신 ??( ??)를 사용할 수 있다. 다소 혼란스러워 보이기도 하고 가독성이 심하게 떨어지기는 하지만 C표준에 의해 정상적인 소스로 인정된다. 재미있는 것은 3중 문자 치환은 구문 해석(Parsing) 전에 일어나므로 문자열 상수에 있는 3중 문자까지도 치환된다는 점이다. 그래서 문자열 내에서 부작용이 발생할 수 있으며 이 부작용을 해결하기 위해 확장열에 3중 문자의 선두로 사용되는 ?를 표기할 수 있는 ?가 따로 정의되어 있는 것이다.

이 외에도 C++ 표준은 연산자나 구두점을 위한 대체 토큰인 이중 문자(Alternative token)라는 것도 정의하고 있다. 예를 들어 <%는 {로 대체되며 %>는 }로 대체되는 식인데 비주얼 C++과 Dev-C++은 2중 문자를 지원하지 않는다. 키보드에 { } 문자가 없는 나라들은 3중 문자가 필요하겠지만 우리나라 키보드에는 이 문자들이 모두 있으므로 우리가 3중 문자에 관심을 가져야 할 이유는 전혀 없는 셈이다.

 

참고

앞에서 문자형 변수에는 문자의 아스키 코드값이 저장되며 문자 상수도 아스키 코드값으로 평가된다고 설명했다. 그러나 이는 정확하게 말하면 사실이 아니다. 윈도우즈 환경에서는 사실이고 대부분의 환경에서도 이 설명이 맞다. 그러나 C 스팩에 문자 코드는 반드시 아스키 코드여야 한다고 명시되어 있지 않으며 다른 환경에서는 문자 코드 체계가 달라질 수도 있다. EBCDIC을 쓰는 환경, 유니코드를 쓰는 환경도 있으므로 'A'의 문자 코드가 항상 65라고 할 수 없다.

이 책은 정확한 설명보다는 이해를 쉽게 하는 쪽으로 작성되어 있다. 정확한 것도 좋지만 처음부터 너무 상세하게 모든 예외적인 문법까지 다 설명하려면 정의가 길고 복잡해진다. 또한 여러분들도 이 문법들을 한꺼번에 정확하게 공부하려고 하면 무척 피곤해진다. 그래서 처음에 다소 부정확한 면이 있더라도 직관적으로 이해하기 쉬운 쪽으로 설명을 전개하기로 한다. 문법의 상세한 면과 예외적인 사항에 대해서는 기본을 익힌 후에 스팩 문서를 보면서 연구해도 늦지 않다.

 

TAG •

List of Articles
분류 제목 글쓴이 날짜 조회 수
Vegas Pro 베가스 강좌 목록 아방스 2017.09.28 890
파이널컷X 파컷 강좌 목록 아방스 2017.06.18 761
어도비 프리미어 [프리미어 프로 강좌] 분신술 효과 만들기 아방스 2017.08.01 96
어도비 프리미어 [프리미어 프로 강좌] 서서히 원하는 색으로 물들이기 아방스 2017.08.01 198
어도비 프리미어 [프리미어 프로 강좌] 스틸이미지 출력하하는 방법 아방스 2017.08.01 118
어도비 프리미어 [프리미어 프로 강좌] 영상 및 사진 크기 일괄 설정하기 아방스 2017.08.01 781
어도비 프리미어 [프리미어 프로 강좌] 크로마키 집에서 해봅시다. (블루,그린스크린 없이도 가능) 아방스 2017.08.01 301
어도비 프리미어 [프리미어 프로] 검은색 배경이 있는 자막 만들기 아방스 2016.12.19 10156
어도비 프리미어 [프리미어 프로] 사진 움직이는 효과 주기 아방스 2017.08.01 442
어도비 프리미어 [프리미어 프로] 아무것도 몰라도 영상편집 할수 있다! 아방스 2017.09.28 353
어도비 프리미어 [프리미어 프로] 영상 회전시키기 (거꾸로 촬영된경우) 아방스 2017.08.01 1835
어도비 프리미어 [프리미어cc 2015 강좌] pip 효과 만들기 아방스 2016.12.19 202
어도비 프리미어 [프리미어CC 신기능] 마스크 추적 사용법 알아보기 아방스 2017.08.01 326
어도비 프리미어 [프리미어cc2017] 프록시 편집에 대해서 아방스 2017.08.01 789
어도비 프리미어 [프리미어프로cc2017.1] 애니메이션 자막 템플릿 만들어보기 아방스 2017.08.01 458
어도비 프리미어 [프리미어프로cc2017.1] 자막바 길이자동 조절 ver. 2 file 아방스 2017.08.01 473
어도비 프리미어 [프리미어프로cc2017.1] 제목 메뉴와 자막 템플릿이 사라졌어요! 아방스 2017.08.01 987
어도비 프리미어 [프리미어프로cc2017] 자동으로 길이 조절 되는 자막 바 file 아방스 2017.08.01 5013
어도비 프리미어 [프리미어프로] 레이아웃 초기화 및 저장,삭제 방법 아방스 2017.02.05 584
어도비 프리미어 [프리미어프로] 매드무비 제작 팁 스킬창 확대해 보여주기 아방스 2017.02.05 166
어도비 프리미어 [프리미어프로] 사진으로 영상만들어 유튜버 되어보자 아방스 2017.02.05 89
어도비 프리미어 [프리미어프로] 시계 애니메이션 만들기 file 아방스 2017.01.08 3421
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Next
/ 19