728x90

C 언어 표준

가장 이상적인 것은 우리가 C 프로그램을 작성했을 때, 그 프로그램이 특정 하드웨어를 사용하는 프로그램이 아닌 이상 모든 C 컴파일러에서 동작하는 것입니다. 이것을 실현하기 위해서는 서로 다른 여러 C 컴파일러들이 같은 하나의 규칙을 사용해야 합니다.

처음 C 언어에 대한 마땅한 표준이 없던 시절, Brain Kernighan과 Dennis Ritchie가 저술한 "The C Programming Language"의 초판이 C 언어의 표준으로 자연스레 받아들여졌습니다. 그 표준을 K&R C 또는 Classic C라고 부릅니다. 그 책의 부록으로 실려 있는 "C Reference Manual"이 C 컴파일러들에 대해 가이드 역할을 했지만, 이 부록에는 C 언어만 정의하고 C 라이브러리에 대해서는 정의하지 않았습니다. 그래서 다른 언어들에 비해 라이브러리에 더 의존하는 C 언어의 특성상 표준으로 쓰이기에는 적합하지 않았습니다. 이렇게 공식적인 라이브러리에 대한 표준이 마땅히 없던 상황에서 Unix와 함께 제공됐던 라이브러리가 사실상 표준이 되었습니다.

ANSI/ISO C 표준
C가 발전하고, 다양한 컴퓨터 시스템에 널리 사용되면서 C 사용자들은 좀 더 이해하기 쉽고 다양한 상황을 고려한 표준이 필요하다는 것을 깨달았습니다. 이러한 필요를 충족시키기 위해 미국표준협회(ANSI)는 1983년에 새로운 표준 제정을 위한 위원회(X3J11)를 설치하고 표준을 제안했습니다. 위원회가 제안한 표준이 1989년에 정식으로 채택되었으며, 이 표준(ANSI C)은 C 언어와 C 라이브러리를 함께 정의하고 있습니다.

1990년, 국제표준화기구(ISO)에서도 C 표준(ISO C)을 채택하였습니다. ISO C와 ANSI C는 사실상 같은 표준을 가리키고 있으며, ANSI/ISO 표준의 최종 버전을 C89(ANSI 승인에 기초) 또는 C90(ISO 승인에 기초)이라고 부릅니다. 흔히 사람들이 ANSI C라고 부르는 것은, ANSI 버전이 더 먼저 나왔기 때문입니다.

위원회는 몇 가지 기본 원칙을 지켰습니다. "C의 정신을 계승하자"라는 것이었는데, 위원회는 C의 정신을 나타내는 것으로 다음과 같은 아이디어들을 제시했습니다.
    ▶ 프로그래머를 믿자
    ▶ 프로그래머가 하려고 하는 것을 막지 말자
    ▶ C 언어를 작고 단순하게 유지하자
    ▶ 하나의 연산을 처리하는 것에 오직 한 가지 방법만 제공하자
    ▶ 이식성이 훼손되더라도 빠르게 실행되게 하자

C 언어를 배우게 되면, C의 이런 철학이 엿보이는 여러 예시를 볼 수 있습니다.

C99 표준
1994년 C9X 위원회라고 알려진 ANSI/ISO 공동 위원회가 C 표준의 개정 작업을 시작해서 C99 표준이 만들어졌습니다. 이 표준은 C 언어를 작고 단순하게 유지하자는 원칙을 포함하여, C90 표준의 기본 원칙들을 그대로 고수했습니다.

이 위원회의 목표는 다음과 같습니다.
    1. 각 나라의 문자들을 지원함으로써 국제적인 프로그래밍을 지원하는 것
    2. 문제를 이미 경험해본 적이 있는 사람들의 의견을 수용하는 것
        - C가 64bit 프로세서를 지원할 일이 생겼을 때, 이 문제를 고민했던 사람들의 경험을 바탕으로 표준을 개정했습니다.
    3. 과학과 공학 프로젝트가 요구하는 정밀한 수치 계산이 가능하도록 하는 것

이 세 가지 사항들이 주요 목표였고, 나머지 목표들은 부가적인 것이었습니다. 예를 들면, C90과 C++의 비호환성을 최소화시키고, C를 개념적으로 간단하게 유지하는 것이었습니다. 위원회는 C가 아닌 C++가 더 크고 야심적인 언어가 되기를 원했습니다.

결론적으로, C99 개정 표준은 C의 본성을 훼손시키지 않고 C를 깔끔하고 효율적인 언어로 계속 남아있게 했습니다.

C11 표준
2007년에 표준 위원회는 다음 개정으로 C1X에 대해 언급했고, 그것이 C11로 실현되었습니다. C11에서는 몇 가지 기본 원칙을 수정했는데, 그중 하나는 프로그래밍 보안 및 안전에 대한 시대적 흐름에 따라서 "프로그래머를 믿자"라는 원칙을 일정 부분 완화해야 할 필요가 있다는 것입니다. 또한, 위원회는 업체들이 C90 때만큼 C99를 수용하지 않는다는 것을 깨닫고 C99의 일부 기능들이 C11에서는 선택사항이 되었습니다.

표준이 개정된다는 것은 표준이 잘못됐었다는 것을 뜻하는 것이 아니라 새로운 기술을 따라가야 할 필요가 생겼기 때문입니다. 컴퓨터의 멀티 프로세서가 대중적으로 사용되자 병렬 프로그래밍에 대한 지원을 추가한 것이 그 예입니다.

본 강의는 C99와 C11의 개정된 표준을 다루지만, 현재 대부분의 C 컴파일러가 개정표준을 완벽하게 지원하지 않아서 독자가 사용하는 시스템에서는 몇몇 내용이 작동하지 않을 수 있습니다.

728x90
728x90