기타 강좌

3-5-나.확장열

문자 상수는 홑따옴표안에 문자를 써서 표기한다. 문자 Y에 대한 문자 상수는 'Y'다. 이 상수를 키보드로 입력하려면 키보드에서 '를 치고 Y를 치고 '를 치면 된다. 그런데 따옴표안에 직접 입력할 수 없는 문자가 있다. 대표적으로 개행 코드를 들 수 있는데 Enter키를 누르는 즉시 정말로 다음 줄로 내려가 버리기 때문에 따옴표안에 개행 코드를 담아서 표현하는 것은 불가능하다.

또한 문자 상수를 표현할 때 사용하는 홑 따옴표 구두점도 문자 상수로 바로 표현할 수 없다. ''' 이렇게 쓰면 두 번째 '가 닫는 따옴표인지 문자 '를 나타내는지 컴파일러가 구분할 수 없다. 그래서 키보드로 직접 입력할 수 없는 문자들은 좀 특수한 방법으로 표현하는데 이를 확장열(Escape Sequence)이라고 한다. 확장열은 백슬레쉬() 문자 다음에 기호 하나를 써서 표현한다.

 

확장열

코드

설명

a

0x07

소리

b

0x08

스페이스

t

0x09

n

0x0a

개행

x##

0x##

16 코드

###

0###

8 코드

0x5c

백슬레쉬

'

0x27

홑따옴표

"

0x22

겹따옴표

?

0x3f

물음표

 

개행 코드는 n으로 표현하는데 이 코드는 First예제에서 이미 실습해 보았다. 탭이나 백 스페이스 같은 문자도 직접 키보드로 입력해서는 따옴표안에 표기할 수 없기 때문에 확장열로 표기해야 한다. 홑따옴표 문자 하나는 '''와 같이 표기할 수 없고 확장열을 사용해서 '''와 같이 표기해야 한다.

확장열 표기에 문자를 사용하기 때문에 문자 자체도 확장열이 될 수밖에 없다. 16진 코드는 키보드에 없는 문자에 대해 코드를 직접 쓸 때 사용한다. 'A'는 'x41'과 동일하다. 16진 코드를 확장열로 표기할 때 다음의 x는 반드시 소문자로 써야 하며 대문자는 인정하지 않는다. 문자열 상수내에 16진 코드를 직접 쓸 경우 16진수로 인식되는 모든 문자를 확장열로 취급한다는 점을 주의하자. 'x53trike"는 x53이 s이므로 "strike"이지만 "53econd"는 다음의 53ec까지를 16진수로 해석해 버리므로 "second"가 되지 않고 에러로 처리된다. 왜냐하면 53ec는 문자 코드 범위 바깥이므로 하나의 문자가 아니기 때문이다. 이런 경우는 16진 코드를 쓰지 않거나 다른 방법으로 문자열을 표기해야 한다.

확장열을 쓰는 이유는 꼭 키보드로 표현하지 못해서뿐만 아니라 환경에 따라 달라질 수 있는 코드를 논리적으로 표현하기 위해서이다. 개행을 하는 방식은 시스템마다 다른데 윈도우즈에서는 CR, LF의 조합으로, 유닉스는 LF만으로, 매킨토시는 CR만으로 개행 문자를 표현한다. C는 이런 방식에 상관없이 개행을 표현할 수 있는 확장열을 제공하고 프로그래머는 개행이 필요할 때 n이라고만 적으면 된다.

탭의 경우 일정한 자리를 띄우는 것이 아니라 현재 위치에서 다음 탭 위치로 이동하는 기능을 하므로 소스상에 입력된 탭에 의해 띄워진 빈칸과 실제 출력될 위치의 탭 크기가 다를 수 있다. 그래서 탭키를 문자열 상수에 직접 쓰지 않고 t 확장열로 표기하여 출력되는 상황에 맞게 탭을 적용하도록 한다.

TAG •

List of Articles
분류 제목 글쓴이 날짜 조회 수
Vegas Pro 베가스 강좌 목록 아방스 2017.09.28 886
파이널컷X 파컷 강좌 목록 아방스 2017.06.18 757
기타 [VB6 강좌] 제3강 - 알고리즘과 순서도 4 독도2005 2009.02.14 2838
기타 [강좌][공식]타겟과 포인트와의 거리 계산 2 허걱 2009.02.14 3136
C언어 Lua강좌 1 *ps인간 2009.01.26 4902
C언어 [C언어] 난수에 대해 2 [Dark].Angel 2009.01.14 3785
C언어 [C언어] 산술연산자, 대입연산자, 증감연산자 란? 2 [Dark].Angel 2009.01.14 3541
C언어 [C언어] 주석에 대해 [Dark].Angel 2009.01.14 2151
C언어 [C언어] scanf()함수에 대해 [Dark].Angel 2009.01.14 2830
C언어 [C언어] 변수에 대해 [Dark].Angel 2009.01.14 2625
C언어 [C언어] printf()함수에 대해 [Dark].Angel 2009.01.14 2583
C언어 [C언어] 함수에 대해 [Dark].Angel 2009.01.14 2101
C언어 [C언어] 상수에 대해 1 [Dark].Angel 2009.01.14 2383
C언어 [C언어] printf()함수의 변환 문자 1 [Dark].Angel 2009.01.14 3242
C언어 [C언어] 이스케이프 시퀸스 [Dark].Angel 2009.01.14 2472
C언어 [C언어] for문과 while문에 대해 [Dark].Angel 2009.01.14 3521
C언어 [C언어] 배열에 대해 1 [Dark].Angel 2009.01.14 2505
C언어 [C언어] (콘솔) 글씨 색깔 바꾸기 1 [Dark].Angel 2009.01.14 6454
C언어 #include 지시어에 대해 1 [Dark].Angel 2009.01.14 2025
C언어 [C언어] 방향키 이동 [깔끔하고 완벽 구동] 8 file [Dark].Angel 2009.01.13 13438
C언어 [비쥬얼 C++ 동영상 강좌] 13회 트리 구조 리스트 CTreeCtrl 클래스 아방스 2009.01.12 2592
C언어 [비쥬얼 C++ 동영상 강좌] 12회 그림 텍스트 리스트 CListCtrl 클래스 아방스 2009.01.12 1883
Board Pagination Prev 1 ... 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Next
/ 19