'ANSI C99'에 해당되는 글 1건

  1. 2007/05/04 C의 진화 ANSI C , ANSI C 2000(C99)

C의 진화 ANSI C , ANSI C 2000(C99)

프로그래밍/C 2007/05/04 16:48
C++ 에 비하면 C의 변화는 빙산의 일각에
불과합니다.

C++이 처음 나왔을때는 객체지향을 지원하기 위해서 시작했습니다만 ,
지금은 일반화 프로그래밍을 지원합니다.

C++의 창시자인 비야네 스트롭스트롭은 자신의 저서 The C++ Programming Language에서
이런말까지 합니다.

"... . 이러한 확장과 수정으로 인해, C++는 라이브러리를 작성하고 사용하기에 더 좋은
언어로 거듭나게 되었다. '진화(evolution)'로까지 표현 되는 C++의 이런 발전은
[Stroustrup,1994]에서 확인할 수 있다."

만약 C++을 1990년도 초반에 배우고 나서 그 사이의 변화된 것을 공부하지
않았다면  그 당시의  C++언어와 지금의 C++언어와는 너무나 다르다는 것을
인지해야됩니다.

현재의 C++은 강력하지만 크고 복잡하고 배우기 어려워졌습니다.

이에 비해 C언어는 초장기 모습을 거의 유지하고 있습니다.
하지만 C언어도 역사가 긴 만큼 조금씩 변화해 왔는데 변화하는 포인트는 오류의 수정이나
간단한 편리한 기능을 추가하는 것이거나 애매한 것을 좀더 정확하게 바뀌는 쪽으로
변해왔습니다. 하지만 그 기본은 변하지 않았습니다.

가장 많이 알고 퍼져있는 (이것은 아마 데니스리치의 ANSI C Programming 2nd )책
때문에 기인할텐데  어찌되었든 가장 많이 알려지고 배워졌던 시기의 C언어는 기존의
ANSI C일  것입니다.
ANSI C 는 보통 C89 또는 C90으로 불리어지고 있습니다.

이후에 거의 변함이 없다가 C99이 나오고 이것은 결국 2000년에 새롭게 ANSI 표준으로
정해지면서 지금(2007년)의 가장 최신 C라고 할 수 있습니다.

많은 C 언어 프로그래머들이 기존의 ANSI C (C90) 을 기억하고 있기 때문에
(물론 새롭게 C를 배운사람이거나 복습을 하거나 새로운 표준에 관심을 가지는 사람들은
제외겠지만요) 바뀐 부분들을 모르는 경우가 있는 것 같습니다.

다음의 주요한 변화 부분입니다.


1. inline 함수가 지원된다. ( 사실 C90에는 표준이 아니였지만 이미 Turbo C시절부터
이것을 지원했기때문에 사실상 표준이었지요 , 새삼스럴울 것은 없습니다.

2. C++처럼   한라인 주석인  // 을 지원한다. (고로 C언어에서도 // 를 쓰면 됩니다.)

3.  새로운 라이브러리 함수를 지원한다. vsnprintf , snprintf 같은 함수입니다.
(사실 이것도 이전부터 쓰고 있었지만 표준으로 승인을 받았다는 것이여서 새삼스러울
것이 없습니다.)

4. 변수선언을 C++처럼 코드내에 어디든 위치할 수 있다. (고로 C언어에서도 C++처럼
아무대서나 선언해도 됩니다.)

이외에도 restict 한정자의 강화 향샹된 IEEE 부동소숫점 등등 여러가지가 있지만
이러한 부분들은 매우 중요한 부분이지만 실제 코딩하는데 있어서는
다가오는 부분이 아니므로  패스합니다. :)

PS.
참고로 당연한 말이지만 gcc를 비롯하여 대부분의 현존 C 컴파일러는 C99를 지원합니다.
g++같은 C++컴파일러로 C를 컴파일 하여도 C가 C++에 포함되어 있기 때문에 컴파일에
문제는 없지만 순수 C라면 C컴파일러로 컴파일 하는것이
코드가 더 빠릅니다. 똑같은 코드더라도 C++컴파일러로 컴파일하면 코드가 커집니다.

PS. C++ 과 비교한 부분은 이해를 위한 것입니다. 언어의 우월성 이야기는 아닙니다.

프로그래밍 언어라는 그 의미 자체가 말하듯 C나C++은 프로그래밍을 하기위한 도구입니다.  오늘 C를 사용하고 내일 C++를 사용할 수 있으며 어제 Java나 Python을 사용할 수 있는
것이 프로그래머이지요
주객이 전도되어 나는 C++프로그래머다 라고 말하거나 C프로그래머다 라고 말하는것은
그리 바람직한 것은 아닌것 같습니다.

프로그래머인데 사용할 수 있는 언어로는  XX가 있습니다. 가 되어야겠지요 :)



top