C99
C99는 C 언어의 현대 개정판이자, C 언어 표준의 과거판인 ISO/IEC 9899:1999의 비공식 이름이다.[1]
역사
ANSI의 표준화 이후 C 언어 표준이 상대적으로 정적으로 남아 있었던 동안, C++는 표준화를 위하여 계속 진화하고 있었다. 1995년에 1990년의 C 표준에 대한 규약 수정안 1이 출판되었는데, 이는 약간의 세부 사항을 교정하고 국제적 문자 세트에 대한 보다 확장된 지원을 위한 것이었다. C 표준은 1990년대 후반에 더 개정되어, 1999년 ISO/IEC 9899:1999가 출간되었고, 여기서 명시한 규범을 흔히 C99라 부른다. 이는 기술적 교정에 의하여 현재까지 3번의 수정이 있었다. 국제 C 표준은 실무 그룹 ISO/IEC JTC1/SC22/WG14에 의해 관리되고 있다.
새로운 기능
C99는 다음과 같은 기능들을 포함하고 있다. 이들 중 일부는 이미 일부 컴파일러에 확장 기능으로서 포함된 적이 있다.
- 인라인 함수의 도입
- 변수의 선언은 더 이상 파일 범위나 복합 명령어의 시작에서만 할 필요가 없다.
long long int
, 선택적인 확장 정수형, 명시적 불리언 자료형, 그리고 복소수를 나타내기 위한complex
자료형 등 새로운 자료형 도입- 가변 길이 배열(VLA: variable-length array)
float read_and_process(int n) { float vals[n]; for (int i = 0; i < n; i++) vals[i] = read_val(); return process(vals, n); }
- BCPL이나 C++와 같은
//
로 시작하는 주석들 snprintf
와 같은 새로운 라이브러리 함수stdbool.h
및inttypes.h
와 같은 새로운 헤더 파일들- 자료형에 무관하게 동작하는(type-generic) 수학 함수들 (
tgmath.h
에 포함) - IEEE 부동소수점 자료에 대한 개선된 지원
- 지정된 이니셜라이저(designated initializers)
- 복합 리터럴(compound literals)
- 가변 인수 매크로(Variadic macro)의 도입
- 보다 적극적인 코드 최적화를 위한
restrict
한정자
C90과의 하위 호환성
C99는 대부분의 영역에서 C90과 하위 호환되지만, 일부는 더 엄격해졌다. 특히, 형식 지정자가 빠진 선언을 int
자료형으로 더 이상 간주하지 않는다. C 표준 위원회에서는 컴파일러들이 형식 지정자를 실수로 빠뜨린 것을 조용히 넘어가기보다는 문제로서 진단하는 것이 더욱 가치가 있다고 보고 이러한 결정을 내렸다. 실제 컴파일러는 형식 지정자가 빠진 것을 오류로 지적할 가능성이 높지만, int
가 지정된 것으로 보고 번역을 계속할 수도 있다.
C++와의 호환성
C99 표준의 일부는 TR1이나 C++11 같은 C++의 제안된 확장에 포함되어 있다. 정수형, 헤더 파일, 라이브러리 함수 등도 제안에 포함되어 있다.
버전 감지
표준 매크로 __STDC_VERSION__
가 199901L
로 정의되면 C99 지원이 가능함을 나타낸다. C90에서의 __STDC__
매크로처럼, __STDC_VERSION__
은 C90과 C99간에 다르게 컴파일할 수 있는 코드를 작성하는데 사용할 수 있다.
#if __STDC_VERSION__ >= 199901L /* "inline" is a keyword */ #else # define inline /* nothing */ #endif
주요 컴파일러들의 지원
GCC 등의 C 컴파일러들은 이제 C99의 새로운 기능들을 대부분 지원한다. 그러나, 마이크로소프트나 볼랜드 등의 업체들은 C99를 별로 지원하지 않았는데, 이는 비슷한 기능 개선이 이미 되어 있는 C++에 치중했기 때문이다.
GCC의 경우, C99의 기능 명세를 상당히 많이 지원하지만(2008년 11월 현재 41개), 아직 완벽한 지원은 아니다. 2008년 11월을 기준으로 9개의 기능들은 제대로 작동하지 않거나 지원되지 않는다.
썬 마이크로시스템즈는 자사의 썬 스튜디오가 C99의 기능들을 완벽히 지원한다고 주장하고 있다.
C의 인터프리터인 Ch도 C99의 주요 기능들을 지원한다.
같이 보기
각주
- ↑ “ISO/IEC 9899:1999 - Programming languages - C”. Iso.org. 2011년 12월 8일. 2014년 4월 8일에 확인함.
외부 링크
- Final version of the C99 standard with corrigenda TC1, TC2, and TC3 included, formatted as a draft
- (영어) New in C9X