준비
여러모로 볼 때 C 언어는 제약이 없는 편이다. 다시 말해 프로그래머가 원한다면 자폭에 가까운 일도 할 수 있다. 언어 차원에서 이런 일들을 막지 않는 것이다. 먼저 몇 가지 제약 사항에 대해 알아보자. 아직은 총을 건넬 만한 수준에 이르지 않았으므로 당분간은 손이 닿지 않는 곳에 넣고 자물쇠를 단단히 채운 뒤 경고 문구를 붙여 두자.
C에서 가장 위험한 구문은 타입 변환(cast)C이다. 레벨 1에서는 이에 대한 설명은 생략한다. 이것 말고도 빠지기 쉬운 함정 몇 가지를 소개하는데, 좀 생소할 수 있다. 특히 C 언어를 90년대에 배웠거나 최신 ISO C로 업그레이드하지 않은 플랫폼에서만 작업했다면 더욱 그럴 것이다.
• 숙련된 C 프로그래머: C 프로그래밍 경험이 많다면 여기서 소개할 내용을 이해하는 데 시간이 좀 걸리거나 심하면 거부감이 들 수도 있다. 여기 나온 코드 중에서 어려운 부분이 나오면 잠시 마음을 진정시킨 뒤에 읽기 바란다.
• 초보 C 프로그래머: C 프로그래밍 경험이 적다면 지금부터 설명할 내용이 좀 어려울 수 있다. 가령 설명 과정에 모르는 용어가 나올 수도 있다. 따라가기 너무 힘들다 싶으면 3장부터 읽고 이 부분은 여유가 생길 때 다시 읽어도 좋다. 단, 레벨 1을 마치기 전에는 반드시 한 번 읽고 넘어가기 바란다.
이 레벨에서 받아들이기 힘든 내용 중 일부는 다음과 같이 일정한 순서에 따라 점진적으로 소개한다.
• 정수 타입은 부호 없는(unsigned)C 버전 위주로 소개한다.
• 포인터는 단계를 나눠서 소개한다. 먼저 함수 매개변수(6.1.4절)로 사용하는 방법과 이때의 (유효하거나 유효하지 않은) 상태에 대해 살펴보고(6.2절), 이후 레벨 2(11장)에서 자세히 소개한다.
• 레벨 1에서는 포인터를 주로 배열 사용 관점에서 살펴본다.