1. 서론

의외로 전산학도의 많은 사람들이 ANSI C를 모르고 있었다. ANSI(American National Standard Institute)의 약자도 모르는 사람들도 종종 있다.
C는 알지만, C언어의 표준이 계속 바뀌는 것을 모르게 되었다. 어떻게 이렇게 변하게 되었을까?
나두 이와 멀리 동떨어진 사람이 아니다. 나도 그들이었고, 그들 속에서 성장해 왔다.

왜 이렇게 표준없이 c언어를 무작정 느낌으로 (?) 공부하게 되었을까? 아마도 c언어를 대충 배운 사람이 c언어를 대충 가르쳐 주기 때문이라고 생각한다. 표준을 이해하고, 표준을 설명하지 않고, 그냥 os-specific한 코드를 짜는 세상이 되고, 마치 가장 기본서인 표준 문서도 보지 않은 채, 고등학교 수학책처럼 외우게 되어버린 c언어책..

새롭게 마음 가짐을 가지고, C언어를 바라봐야한다. 왜 표준이 중요한지를 깨달으면서..


2. 표준
Javascript는 ISO 8601로, c#은 ISO/IEC 23270으로, 자바 언어에서는 Java Language Specification, MHP에는 DVB라는 표준 문서라는 것이 존재한다. 네트웍 표준은 FTP, NFS도 RFC로 존재하듯이 C언어에도 존재한다.

C언어 표준을 만든 ANSI(American National Standard Institute, 미국 표준 기관)는 ISO/IEC에 proposal을 제출하여 승인을 받아 국제 표준이 된다. ISO, IEC에서 일부 규정을 수정할 수도 있는데, 그 수정한 내용은 ANSI에도 반영시켜 표준이 되도록 한다.

1983년, ANSI에서 X3J11이라는 위원회가 표준화를 위해 조직되었고, 그 결과로 1989년 12월 4일, ANS X3.159-1989 라는 문서로 공개하였다. 이렇게 1989년 원래 ANSI C 표준 초안이 만들어졌고, 1990년 ISO 표준이 되었다. ANSI/ISO/IEC 9899:1990라고 불리운다. 이 때, 전혀 내용의 변경이 없었다고 한다.

그리고, C표준은 ANSI/ISO/IEC 9899:1995 으로 변경되었고, ANSI는 1999년 이를 받아들였다.
반면, C++은 ANSI/ISO/IEC 14882:1998으로 표준이 정해졌다.

현재 C는 C99이라는 표준이 완성되었고 채택되었다.

(재미있는 사실은 ANSI/ISO/IEC 14882:1998 C++ language standard 가 2.49Mbyte의 18불인 것에 비해 ANSI/ISO/IEC 9899:1990 C language standard은 17.74Mbyte의 135불이라는 사실이다.)


3. 표준의 중요성

왜 표준이 중요한가?

그것은 portable한 코드와 관련이 되어 있다.
8bit 프로세서부터 32bit 프로세서까지, 다양한 c compiler환경에서 어떤 코드만이 동작될 수 있는지 알려면, 오직 표준밖에 없다는 사실이다.

자바의 경우에 J2ME 어플리케이션이 한 번 만들어지면, J2ME 플랫폼에서 동작이 보장되듯이 c의 표준을 맞춰 작성한다면, 항상 portable한 코드가 될 수 있다는 사실이다.

portable하다라는 의미는 무엇일까? portable이다라는 말 뚯에 os-independent/compiler-independent라는 성격이 있다는 말이 포함된다. 즉, ISO규격에 맞는 코드가 가장 portable하다라는 말과 상통될 수 있다.
writing portable code라는 말은 (ANSI/ISO/IEC 일도 있고, de factor일 수도 있다.) 표준에 맞게 코드를 짠다는 말인 것이다.

os, compiler에 상관없이 규격에 맞게 짜는 일을 쉽게 하므로서, 플랫폼에서 independent하게 동작하기 위해서 표준이 필요하다.

4. 표준의 변화
표준도 변화하고 있다. ISO 9899 C를 이렇게 저렇게 바꾸고 있으며 표준화가 한창 진행중이다. Embedded C, New character types in C, Safer C library, Safer C library fuctions, Decimal floating point, Mathmatical special functions 등 여러 Techincal Report가 나오고 있다.

진화는 계속 된다.(역시 계속 공부해서 익숙해 지는 것외에 방법이 없는 듯~)

레퍼런스 :
http://www.eskimo.com/~scs/c-faq.com/ansi/ansi1.html
http://home.att.net/~jackklein/c/standards.html#inportant
http://www.open-std.org/jtc1/sc22/wg14/www/projects#18037

'철학' 카테고리의 다른 글

올바른 API 디자인  (0) 2006.07.20
오픈 소스 Business 생각???!!!!  (0) 2006.07.20
글쓰기의 어려움  (0) 2006.07.20
Favor object composition over class inheritance.  (0) 2006.07.20
개발시 실수할 만한 것들  (0) 2006.07.20
Posted by '김용환'
,