ANSI C
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
ANSI C는 1978년 브라이언 커니핸과 데니스 리치의 저서 "C 프로그래밍 언어"를 통해 처음 소개된 C 언어의 표준을 의미한다. 미국 국립 표준 협회(ANSI)에 의해 제정되었으며, 이후 국제 표준화 기구(ISO)에서도 채택되었다. ANSI C는 여러 차례 개정을 거쳐 C89, C90, C95, C99, C11, C17, C23 등의 표준으로 발전해 왔으며, 현재 널리 사용되는 거의 모든 컴파일러에서 지원된다.
더 읽어볼만한 페이지
- ANSI 표준 - DMX512
DMX512는 1986년 개발된 조명 장비 제어를 위한 디지털 통신 프로토콜이며, 최대 512개의 채널을 지원하고, RDM을 지원하며, 견고성과 단순성으로 인해 널리 사용된다. - ANSI 표준 - ANSI 이스케이프 코드
ANSI 이스케이프 코드는 비디오 단말기의 화면 제어 기능을 수행하는 문자열 시퀀스로, ECMA-48 표준으로 채택되어 커서 이동, 화면 지우기, 텍스트 스타일 및 색상 변경 등 다양한 기능을 지원하며 현대 터미널 에뮬레이터에서 널리 사용된다. - 프로그래밍 언어 표준 - ISO/IEC JTC 1/SC 22
ISO/IEC JTC 1/SC 22는 프로그래밍 언어, 환경 및 시스템 소프트웨어 인터페이스 분야의 표준화를 담당하는 ISO/IEC JTC 1의 하위 위원회이며, 다양한 프로그래밍 언어와 시스템 소프트웨어 인터페이스의 표준화를 목표로 1985년에 설립되었다. - 프로그래밍 언어 표준 - C99
C99는 1999년 ISO/IEC 9899:1999로 출판된 C 프로그래밍 언어의 표준으로, 인라인 함수, 가변 길이 배열, `//` 주석 등 새로운 기능들을 추가하고 IEEE 부동소수점 자료 지원을 개선했으며 C90과 하위 호환성을 가지면서 C++와의 호환성을 고려했다. - C 프로그래밍 언어 - C (프로그래밍 언어)
C는 하드웨어 제어와 이식성이 뛰어난 고급 절차적 프로그래밍 언어로서, 다양한 분야에서 사용되며 후속 언어에 영향을 주었고, 성능과 효율성이 높지만 안전성 문제 개선이 필요한 언어이다. - C 프로그래밍 언어 - 헤더 파일
헤더 파일은 프로그래밍 언어에서 코드 재사용성, 모듈화, 컴파일 시간 단축에 기여하며 함수 프로토타입, 변수 선언 등을 포함하고 `#include` 지시어로 소스 코드에 포함되어 사용되는 파일이다.
ANSI C | |
---|---|
C 표준 | |
종류 | 국제 표준 |
분야 | 프로그래밍 언어 |
설명 | C 프로그래밍 언어를 위한 표준 |
역사 | |
최초 표준 | ANSI C (ANSI X3.159-1989) |
국제 표준 | ISO/IEC 9899:1990 |
현재 표준 | ISO/IEC 9899:2018 |
표준 | |
ANSI C | (ANSI X3.159-1989) |
ISO/IEC 9899:1990 | (일반적으로 "C89"라고 함) |
ISO/IEC 9899:1995/AMD1 | ("C95") |
ISO/IEC 9899:1999 | ("C99") |
ISO/IEC 9899:2011 | ("C11") |
ISO/IEC 9899:2018 | ("C17") |
ISO/IEC 9899:2023 | ("C23") |
영향 | |
영향을 준 언어 | C++ Objective-C |
2. 역사
C 언어는 1978년 브라이언 커니핸과 데니스 리치의 저서 "C 프로그래밍 언어"를 통해 처음 소개되었다 (K&R C). 이후, 미국 국립 표준 협회(ANSI)와 국제 표준화 기구(ISO)에 의해 여러 차례 표준화가 진행되었다.
표준을 참조할 때 많은 프로그래머는 "ANSI C"를 사용하지만, 일부는 "ISO C"를 사용하기도 한다. 표준 기구에 중립적인 입장을 취하는 개발자들은 "표준 C"라는 용어를 사용한다.[1]
2. 1. K&R C (C78)
1978년 브라이언 커니핸과 데니스 리치의 저서 ''C 프로그래밍 언어''에 수록된 비공식 명세이다.2. 2. C89
1983년, 미국 국립 표준 협회(ANSI)는 C 언어의 표준 사양을 확립하기 위해 X3J11 위원회를 설립하였다.[1] 1989년에 이 표준은 완성되어 ANSI X3.159-1989 "프로그래밍 언어 C"로 승인되었다. 이 버전의 언어는 ANSI C로 불리기도 하며, 이후 C99와 구별하기 위해 C89라고도 불린다.[1]C89의 형식을 수정한 표준[35]은 국제 표준화 기구(ISO)에 의해 ISO/IEC 9899:1990으로 채택되었다. 이 표준은 C90이라고도 불린다. C89와 C90은 본질적으로 동일한 언어이다.
이 표준은 이후 ANSI/INCITS, ISO/IEC[36] 양측에 의해 철회되었다.
2. 3. C90
서식 변화를 제외하고 C89와 동일한 표준이 국제 표준화 기구(ISO)에 의해 ISO/IEC 9899:1990으로 승인되었으며,[58] C90으로 불리기도 한다. 그러므로 "C89"와 "C90"은 근본적으로 동일한 언어를 가리킨다.[35]이 표준은 ANSI/INCITS[59]와 ISO/IEC[60]에 의해 철회되었다.
2. 4. C95
1995년, 국제 표준화 기구(ISO)는 C 표준의 확장판인 개정 제1판(Amendment 1)을 출판하였다. 정식 명칭은 ISO/IEC 9899/AMD1:1995이며, 별칭은 C95이다.[61][62]주요 변경 사항은 다음과 같다.
- 표준 라이브러리에서 개선된 멀티바이트 및 확장 문자 지원: `
`, `
` 및 멀티바이트 I/O를 도입하였다. - 언어에 이중 글자를 추가하였다.
- 연산자의 대체 사양을 위한 표준 매크로를 사양하였다. (예: `&&`의 경우 `and`)
- 표준 매크로 `__STDC_VERSION__`을 사양하였다.
다음은 C90에 대해 ISO가 출판한 두 가지 기술적 정오표이다.
- ISO/IEC 9899 TCOR1 (1995년)
- ISO/IEC 9899 TCOR2 (1996년)
2. 4. 1. C95 호환성 확인 전처리기 테스트
c#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199409L
/* C95 호환 소스 코드. */
#elif defined(__STDC__)
/* C89 호환 소스 코드. */
#endif
2. 5. C99
2000년 3월, ANSI는 ISO/IEC 9899:1999 표준을 채택했다.[10] 이 표준은 일반적으로 C99라고 불린다. C99는 이전 표준에 비해 다음과 같은 주요 사항이 추가되었다.- 새로운 내장 데이터 형식: `long long`, `_Bool`, `_Complex` 및 `_Imaginary`
- 정적 배열 인덱스, 지정된 초기자, 복합 리터럴, 가변 길이 배열, 플렉서블 배열 멤버, 가변 인자 매크로, `restrict` 키워드를 포함한 몇 가지 새로운 핵심 언어 기능
- `stdint.h`, `<tgmath.h>`, `fenv.h`, `<complex.h>`를 포함한 몇 가지 새로운 라이브러리 헤더
- 인라인 함수, `//`를 사용한 단일 라인 주석, 선언과 코드 혼합, 식별자의 유니버셜 문자 이름을 포함한 여러 C++ 기능과의 호환성 개선
- 암시적 함수 선언 및 암시적 `int`와 같은 여러 위험한 C89 언어 기능 제거
C99에 대해 ISO는 세 가지 기술 정오표를 발행했다.
- ISO/IEC 9899:1999/Cor 1:2001(E)
- ISO/IEC 9899:1999/Cor 2:2004(E)
- ISO/IEC 9899:1999/Cor 3:2007(E) - 표준 라이브러리 함수 gets를 폐지한 것으로 유명하다.
이 표준은 C11을 선호하여 ANSI/INCITS[11]와 ISO/IEC[12] 모두에서 철회되었다.
2. 6. C11
C11은 2011년 12월 8일에 공식적으로 비준 및 공표된 C 표준이다. ISO/IEC 9899:2011로도 알려져 있다.[13] 주요 기능은 다음과 같다.- 개선된 유니코드 지원
- `_Generic` 키워드를 사용한 타입 제네릭(type-generic) 표현식
- 플랫폼 간 멀티스레딩 API (`threads.h`)
- 코어 언어와 라이브러리 모두에서 원자적 타입 지원 (`stdatomic.h`)
C11에 대해 ISO에서 발행한 기술적 정오표는 다음과 같다.
2. 7. C17
C17은 2018년 6월에 발표되었다.[14] ISO/IEC 9899:2018 (통칭 '''C17''' 또는 '''C18''')로 개정되었으며, C11의 결함을 해결하는 데 중점을 둔 마이너 업데이트이다.[15][42]2. 8. C23
C23은 2024년 10월에 발표되었으며, 현재 C 프로그래밍 언어의 표준이다.[16]3. 기타 관련 ISO 출판물
ISO/IEC는 표준화 과정의 일환으로 C 언어와 관련된 기술 보고서 및 규격을 발행한다.[74]
- ISO/IEC TR 19769:2004[63]: 유니코드 변환 형식을 지원하기 위한 라이브러리 확장으로, C11에 통합되었다.
- ISO/IEC TR 24731-1:2007[64]: 범위 검사 인터페이스를 지원하기 위한 라이브러리 확장으로, C11에 통합되었다.
- ISO/IEC TR 18037:2008[65]: 임베디드 C 확장.
- ISO/IEC TR 24732:2009[66]: 십진 부동 소수점 연산으로, ISO/IEC TS 18661-2:2015로 대체되었다.
- ISO/IEC TR 24747:2009[67]: 특수 수학 함수.
- ISO/IEC TR 24731-2:2010[68]: 동적 할당 함수를 지원하기 위한 라이브러리 확장.
- ISO/IEC TS 17961:2013[69]: C의 안전한 코딩.
- ISO/IEC TS 18661-1:2014[70]: IEC 60559:2011 호환 이진 부동 소수점 연산.
- ISO/IEC TS 18661-2:2015[71]: IEC 60559:2011 호환 십진 부동 소수점 연산.
- ISO/IEC TS 18661-3:2015[72]: IEC 60559:2011 호환 교환 및 확장 부동 소수점 유형.
- ISO/IEC TS 18661-4:2015[73]: IEC 60559:2011 호환 보조 함수.
TS 18661의 다섯 번째 및 최종 부분, 소프트웨어 트랜잭셔널 메모리 사양, 병렬 라이브러리 확장을 포함하여 더 많은 기술 사양이 개발 중이며 승인을 대기하고 있다.[74]
4. 주요 컴파일러 지원
ANSI C는 현재 널리 사용되는 거의 모든 컴파일러에서 지원된다.[29][30] GCC와 클랭은 현재 인기 있는 두 개의 주요 C 컴파일러이며, 둘 다 C11을 기반으로 하고 C17과 같은 최신 사양의 변경 사항을 포함한 업데이트가 있다.[29][30] 표준 C로만 작성되었고 하드웨어 종속적인 가정을 하지 않은 소스 코드는 적합한 C 구현을 갖춘 모든 시스템 플랫폼에서 올바르게 컴파일될 것이 거의 보장된다. 이러한 예방 조치를 취하지 않으면 대부분의 프로그램은 GUI 라이브러리와 같은 비표준 라이브러리를 사용하거나, 특정 데이터 형식의 정확한 크기 및 바이트 엔디안과 같은 컴파일러 또는 플랫폼별 속성에 의존하기 때문에 특정 플랫폼이나 특정 컴파일러에서만 컴파일될 수 있다.
4. 1. 컴파일러 목록
- Amsterdam Compiler Kit (C K&R 및 C89/90)
- ARM 리얼뷰(RealView)
- 클랭 (LLVM 백엔드 사용)
- GCC (완전한 C89/90, C99, C11)
- HP C/ANSI C 컴파일러 (C89 및 C99)[75]
- IBM XL C/C++ (C11, 버전 12.1부터 시작)[76]
- 인텔 ICC
- LabWindows/CVI
- LCC
- 오픈왓콤 (C89/90 및 일부 C99)
- 마이크로소프트 비주얼 C++ (C89/90 및 일부 C99)
- Pelles C (C99 및 C11. 윈도우 전용)
- vbcc (C89/90 및 C99)
- 타이니 C 컴파일러 (C89/90 및 일부 C99)
4. 2. 호환성 확인
`__STDC__` ("표준 C") 매크로를 사용하여 K&R C와 ANSI C 표준 간의 차이점을 완화하고, 코드를 ANSI와 K&R 섹션으로 분리할 수 있다.[31]```c
#if defined(__STDC__) && __STDC__
extern int getopt(int, char * const *, const char *);
#else
extern int getopt();
#endif
```
위의 예에서 ANSI 호환 구현의 경우 함수 선언에 프로토타입이 사용되고, 그렇지 않은 경우 구식 비프로토타입 선언이 사용된다. 이는 C99 기준으로도 여전히 ANSI 호환된다. 이 코드가 정의와 평가를 모두 확인하는 방식에 주목해야 하는데, 일부 구현에서는 비 ANSI 호환성을 나타내기 위해 `__STDC__`를 0으로 설정할 수 있기 때문이다.[31]
참조
[1]
웹사이트
The Origin of ANSI C and ISO C
https://blog.ansi.or[...]
2018-08-14
[2]
간행물
Standard C: The ANSI Draft Grows Up
https://archive.org/[...]
2022-11-15
[3]
웹사이트
Standards - Using the GNU Compiler Collection (GCC)
https://gcc.gnu.org/[...]
2012-06-24
[4]
웹사이트
INCITS/ISO/IEC 9899
http://www.techstree[...]
2018-10-03
[5]
웹사이트
ISO/IEC 9899:1990 - Programming Languages -- C
http://www.iso.org/i[...]
2012-06-24
[6]
웹사이트
A brief description of Normative Addendum 1
http://www.lysator.l[...]
2010-09-12
[7]
웹사이트
ISO/IEC 9899:1990/Amd 1:1995
https://www.iso.org/[...]
International Organization for Standardization
2013-03-22
[8]
웹사이트
ISO/IEC 9899:1990/Cor 1:1994
http://www.iso.org/c[...]
2019-01-21
[9]
웹사이트
ISO/IEC 9899:1990/Cor 2:1996
http://www.iso.org/c[...]
2019-01-21
[10]
웹사이트
ISO/IEC 9899:1999
http://www.iso.org/c[...]
2019-01-21
[11]
웹사이트
INCITS/ISO/IEC 9899-2012
https://webstore.ans[...]
ANSI
[12]
웹사이트
ISO/IEC 9899:1999 - Programming Languages -- C
https://www.iso.org/[...]
2012-06-24
[13]
웹사이트
ISO/IEC 9899:2011/Cor 1:2012
https://www.iso.org/[...]
International Organization for Standardization
[14]
웹사이트
ISO/IEC 9899:2018 - Information technology -- Programming languages -- C
https://www.iso.org/[...]
[15]
웹사이트
The Standard - C
http://www.iso-9899.[...]
[16]
웹사이트
ISO/IEC 9899:2024 - Information technology — Programming languages — C
https://www.iso.org/[...]
[17]
웹사이트
ISO/IEC TR 19769:2004
https://www.iso.org/[...]
International Organization for Standardization
[18]
웹사이트
ISO/IEC TR 24731-1:2007
https://www.iso.org/[...]
International Organization for Standardization
[19]
웹사이트
ISO/IEC TR 18037:2008
https://www.iso.org/[...]
International Organization for Standardization
[20]
웹사이트
ISO/IEC TR 24732:2009
https://www.iso.org/[...]
International Organization for Standardization
[21]
웹사이트
ISO/IEC TR 24747:2009
https://www.iso.org/[...]
International Organization for Standardization
[22]
웹사이트
ISO/IEC TR 24731-2:2010
https://www.iso.org/[...]
International Organization for Standardization
[23]
웹사이트
ISO/IEC TS 17961:2013
https://www.iso.org/[...]
International Organization for Standardization
[24]
웹사이트
ISO/IEC TS 18661-1:2014
https://www.iso.org/[...]
International Organization for Standardization
[25]
웹사이트
ISO/IEC TS 18661-2:2015
https://www.iso.org/[...]
International Organization for Standardization
[26]
웹사이트
ISO/IEC TS 18661-3:2015
https://www.iso.org/[...]
International Organization for Standardization
[27]
웹사이트
ISO/IEC TS 18661-4:2015
https://www.iso.org/[...]
International Organization for Standardization
[28]
웹사이트
Experimental C features
https://en.cpprefere[...]
2016-01-16
[29]
웹사이트
2 Language Standards Supported by GCC - 2.1 C Language
https://gcc.gnu.org/[...]
GCC, the GNU Compiler Collection
2019-02-05
[30]
웹사이트
Language Compatibility
https://clang.llvm.o[...]
2019-02-05
[31]
웹사이트
Standard predefined macro names
https://www.ibm.com/[...]
2019-04-10
[32]
웹사이트
HP C/ANSI C developer's bundle
http://www.hp.com/go[...]
2015-07-12
[33]
문서
Support for ISO C11 added to IBM XL C/C++ compilers
https://www.ibm.com/[...]
[34]
문서
link to Pelles C pages
http://www.smorgasbo[...]
[35]
웹사이트
Standards - Using the GNU Compiler Collection (GCC)
https://gcc.gnu.org/[...]
2012-06-24
[36]
웹사이트
ISO/IEC 9899:1990 - Programming Languages -- C
http://www.iso.org/i[...]
2012-06-24
[37]
웹사이트
A brief description of Normative Addendum 1
http://www.lysator.l[...]
2017-08-01
[38]
웹사이트
ISO/IEC 9899:1990/Amd 1:1995
http://www.iso.org/i[...]
International Organization for Standardization
2017-08-01
[39]
웹사이트
INCITS/ISO/IEC 9899-2012
http://webstore.ansi[...]
ANSI
2017-08-01
[40]
웹사이트
ISO/IEC 9899:1999 - Programming Languages -- C
http://www.iso.org/i[...]
2012-06-24
[41]
웹사이트
ISO/IEC 9899:2011/Cor 1:2012
http://www.iso.org/i[...]
International Organization for Standardization
2017-08-01
[42]
웹사이트
C の歴史 - cppreference.com
https://ja.cpprefere[...]
[43]
웹사이트
ISO/IEC TR 19769:2004
http://www.iso.org/i[...]
International Organization for Standardization
2017-08-01
[44]
웹사이트
ISO/IEC TR 24731-1:2007
http://www.iso.org/i[...]
International Organization for Standardization
2017-08-01
[45]
웹사이트
ISO/IEC TR 18037:2008
http://www.iso.org/i[...]
International Organization for Standardization
2017-08-01
[46]
웹사이트
ISO/IEC TR 24732:2009
http://www.iso.org/i[...]
International Organization for Standardization
2017-08-01
[47]
웹사이트
ISO/IEC TR 24747:2009
http://www.iso.org/i[...]
International Organization for Standardization
2017-08-01
[48]
웹사이트
ISO/IEC TR 24731-2:2010
http://www.iso.org/i[...]
International Organization for Standardization
2017-08-01
[49]
웹사이트
ISO/IEC TS 17961:2013
http://www.iso.org/i[...]
International Organization for Standardization
2017-08-01
[50]
웹사이트
ISO/IEC TS 18661-1:2014
http://www.iso.org/i[...]
International Organization for Standardization
2017-08-01
[51]
웹사이트
ISO/IEC TS 18661-2:2015
http://www.iso.org/i[...]
International Organization for Standardization
2017-08-01
[52]
웹사이트
ISO/IEC TS 18661-3:2015
http://www.iso.org/i[...]
International Organization for Standardization
2017-08-01
[53]
웹사이트
ISO/IEC TS 18661-4:2015
http://www.iso.org/i[...]
International Organization for Standardization
2017-08-01
[54]
문서
See a list at http://en.cppreference.com/w/c/experimental Visited 16 January 2016.
[55]
웹사이트
HP C/ANSI C developer's bundle
http://www.hp.com/go[...]
2015-07-12
[56]
웹사이트
Support for ISO C11 added to IBM XL C/C++ compilers
http://www.ibm.com/d[...]
[57]
문서
ref1
[58]
웹인용
Standards - Using the GNU Compiler Collection (GCC)
https://gcc.gnu.org/[...]
2012-06-24
[59]
문서
http://www.techstreet.com/cgi-bin/detail?doc_no=incits_iso_iec%7C9899;product_id=232462
[60]
웹인용
ISO/IEC 9899:1990 - Programming Languages -- C
http://www.iso.org/i[...]
2012-06-24
[61]
웹인용
A brief description of Normative Addendum 1
http://www.lysator.l[...]
2010-09-12
[62]
웹인용
ISO/IEC 9899:1990/Amd 1:1995
http://www.iso.org/i[...]
International Organization for Standardization
2013-03-22
[63]
웹인용
ISO/IEC TR 19769:2004
http://www.iso.org/i[...]
International Organization for Standardization
[64]
웹인용
ISO/IEC TR 24731-1:2007
http://www.iso.org/i[...]
International Organization for Standardization
[65]
웹인용
ISO/IEC TR 18037:2008
http://www.iso.org/i[...]
International Organization for Standardization
[66]
웹인용
ISO/IEC TR 24732:2009
http://www.iso.org/i[...]
International Organization for Standardization
[67]
웹인용
ISO/IEC TR 24747:2009
http://www.iso.org/i[...]
International Organization for Standardization
[68]
웹인용
ISO/IEC TR 24731-2:2010
http://www.iso.org/i[...]
International Organization for Standardization
[69]
웹인용
ISO/IEC TS 17961:2013
http://www.iso.org/i[...]
International Organization for Standardization
[70]
웹인용
ISO/IEC TS 18661-1:2014
http://www.iso.org/i[...]
International Organization for Standardization
[71]
웹인용
ISO/IEC TS 18661-2:2015
http://www.iso.org/i[...]
International Organization for Standardization
[72]
웹인용
ISO/IEC TS 18661-3:2015
http://www.iso.org/i[...]
International Organization for Standardization
[73]
웹인용
ISO/IEC TS 18661-4:2015
http://www.iso.org/i[...]
International Organization for Standardization
[74]
웹사이트
http://en.cppreferen[...]
2016-01-16
[75]
웹인용
HP C/ANSI C developer's bundle
http://www.hp.com/go[...]
2015-07-12
[76]
웹사이트
Support for ISO C11 added to IBM XL C/C++ compilers
http://www.ibm.com/d[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com