# ANSI C

**ANSI C**, **ISO C**, **표준 C**(Standard C)는 미국 국립 표준 협회(ANSI)와 국제 표준화 기구(ISO)가 출판한 C 프로그래밍 언어의 이후 표준들을 가리킨다. 역사적으로 이 이름들은 오리지널의 가장 잘 지원되는 버전의 표준(C89 또는 C90)을 가리켰다. C로 개발하는 소프트웨어 개발자들은 표준을 따르는 것을 권고받으며 그렇게 함으로써 컴파일러 간 이식에 도움을 줄 수 있다.

## 역사

C를 위한 최초 표준은 ANSI에 의해 출판되었다. 이 문서가 최종적으로 국제 표준화 기구(ISO)에 채택되었고 ISO가 게시한 최종 수정판들을 ANSI가 채택했음에도 불구하고 수많은 프로그래머들은 표준 참조를 위해 ANSI C를 사용하고 있다. 일부 소프트웨어 개발자들은 ISO C라는 용어를 사용하지만 표준화 기구에 상대적으로 중립적인 다른 이들은 표준 C로 부른다.

### C89

1983년, ANSI는 X3J11이라는 이름의 위원회를 설립하여 C의 표준 사양을 확립하였다. 이 표준은 1989년에 완성되어 ANSI X3.159-1989 "프로그래밍 언어 C"(Programming Language C)로 승인되었다. 이 버전의 언어는 ANSI C로 불리기도 한다. 나중에 C89라는 레이블을 사용하여 C99과 구별하게 된다.

### C90

서식 변화만을 제외하고 C89와 동일한 표준이 국제 표준화 기구에 의해 ISO/IEC 9899:1990로 승인되었으며, C90으로 불리기도 한다. 그러므로 "C89"와 "C90"은 근본적으로 동일한 언어를 가리킨다.

이 표준은 ANSI/INCITS와 ISO/IEC에 의해 철회되었다.

### C95

1995년에 ISO는 ANSI-C 표준에 대한 개정 제1판인 확장판을 출판하였다. 최종 이름은 ISO/IEC 9899/AMD1:1995이며 별칭은 C95이다.
오류 정정 외에 언어 기능에 대한 추가적인 변경사항이 있었으며, 이를테면 다음과 같다:

* 표준 라이브러리에서의 개선된 멀티바이트 및 확장 문자 지원: `<wchar.h>`, `<wctype.h>` 및 멀티바이트 I/O.
* 언어에 대한 이중 글자 추가
* 연산자의 대체 사양을 위한 표준 매크로 사양 (예: `&&`의 경우 `and`)
* 표준 매크로 `__STDC_VERSION__`의 사양

개정판 외에도 C90에 대해 2가지 기술적 정오표가 ISO에 의해 출판되었다:

* ISO/IEC 9899 TCOR1 (1995년)
* ISO/IEC 9899 TCOR2 (1996년)

#### C95 호환성을 위한 전처리기 테스트

```
# if defined(\_\_STDC\_VERSION\_\_) && \_\_STDC\_VERSION\_\_ >= 199409L

/\* C95 compatible source code. \*/
# elif defined(\_\_ANSI\_\_)
/\* C89 compatible source code. \*/
# endif

```

### C99

### C11

### C18

### 기타 관련 ISO 출판

* ISO/IEC TR 19769:2004, on library extensions to support Unicode transformation formats, integrated into C11
* ISO/IEC TR 24731-1:2007, on library extensions to support bounds-checked interfaces, integrated into C11
* ISO/IEC TR 18037:2008, on embedded C extensions
* ISO/IEC TR 24732:2009, on decimal floating point arithmetic, superseded by ISO/IEC TS 18661-2:2015
* ISO/IEC TR 24747:2009, on special mathematical functions,
* ISO/IEC TR 24731-2:2010, on library extensions to support dynamic allocation functions
* ISO/IEC TS 17961:2013, on secure coding in C
* ISO/IEC TS 18661-1:2014, on IEC 60559:2011-compatible binary floating-point arithmetic
* ISO/IEC TS 18661-2:2015, on IEC 60559:2011-compatible decimal floating point arithmetic
* ISO/IEC TS 18661-3:2015, on IEC 60559:2011-compatible interchange and extended floating-point types
* ISO/IEC TS 18661-4:2015, on IEC 60559:2011-compatible supplementary functions

TS 18661의 5번째 및 최종 부분, 소프트웨어 트랜잭셔널 메모리 사양, 병렬 라이브러리 확장을 포함하여 더 많은 기술 사양이 개발 중이며 승인을 대기하고 있다.

## ANSI C를 지원하는 컴파일러

* Amsterdam Compiler Kit (C K&R 및 C89/90)
* ARM 리얼뷰(RealView)
* 클랭: LLVM 백엔드 사용
* GCC (완전한 C89/90, C99, C11)
* HP C/ANSI C 컴파일러 (C89 및 C99)
* IBM XL C/C++ (C11, 버전 12.1부터 시작)
* 인텔의 ICC
* LabWindows/CVI
* LCC
* 오픈왓콤 (C89/90 및 일부 C99)
* 마이크로소프트 비주얼 C++ (C89/90 및 일부 C99)
* Pelles C (C99 및 C11. 윈도우 전용)
* vbcc (C89/90 및 C99)
* 타이니 C 컴파일러 (C89/90 및 일부 C99)

* C18, C11, C99, C95, C90, C89
* C와 C++의 호환성
* C++20, C++17, C++14, C++11, C++TR1, C++03, C++98, C++

* ISO C working group
* *Draft ANSI C Standard* (ANSI X3J11/88-090) (May 13, 1988), Third Public Review
* *Draft ANSI C Rationale* (ANSI X3J11/88-151) (Nov 18, 1988)
* *C Information Bulletin #1* (ANSI X3J11/93-007) (May 27, 1992)
* ANSI C Yacc grammar
	+ ANSI C grammar, Lex specification
* Schreiner, Axel-Tobias. 《Object oriented programming with ANSI-C》. Hanser. hdl:1850/8544. ISBN 3-446-17426-5.
* “ISO/IEC 9899:1999 Programming Languages -- C”. American National Standards Institute. 2011년 7월 25일에 원본 문서에서 보존된 문서. 2017년 12월 9일에 확인함. {{
* “ANSI Standards Action Vol. 36, #48” (PDF). American National Standards Institute. 2005년 12월 2일. 2016년 3월 4일에 원본 문서 (PDF)에서 보존된 문서. 2017년 12월 9일에 확인함.