> For the complete documentation index, see [llms.txt](https://emperorvv.gitbook.io/cs-curriculum/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://emperorvv.gitbook.io/cs-curriculum/class1_c_language/ch0.md).

# 0. The C Programming Language

## 0.1. C 언어 교재

C 언어는 C 언어를 직접만든 데니스 리치와 커닝핸이 쓴 \[The C Programming Language]를 교재로 삼았다.

## 0.2. C 언어는

컴파일러나 운영시스템을 작성하는 분야에도 유용해 "시스템 프로그래밍 언어"라고 불리운다.

상대적으로 low-level 언어이다. 여기서 low-level이라 함은 컴퓨터 하드웨어 수준에서 문자, 숫자, 주소에 대해 처리하듯 이 언어에서 처리할 수 있다는 뜻이다.

이 언어는 정적 변수 정의나 함수의 지역변수에 의한 스택 취급 외에는 메모리 할당 기능을 제공하지 않는다. 즉 힙이나 메모리 폐영역회수(가비지 콜렉터) 기능이 없다.

입출력 기능을 따로 가지고 있지 않다. 즉 READ나 WRITE 같은 문장을 가지고 있지 않다.

파일시스템에 접근하는 방법도 없다. 이러한 고수준의 기능은 외부 함수 호출에 의해 구현된다. 대부분의 C언어 컴파일러들은 이러한 기능을 수행하는 표준적 함수 집합을 제공한다.

C는 Test, Loops, Grouping, Subprogram과 같은 Single thread 제어 흐름만을 제공할 뿐이다. multiprogramming, parallel operations, synchronization, coroutines을 제공하지 않는다.

이러한 결핍이 단점처럼 보이지만 간결한 크기를 갖기 때문에 실질적인 장점을 가진다. C언어는 상대적으로 작은 크기이므로 묘사에 필요한 공간이 적어도 되고, 결국 배우기 쉽다.

1983년 ANSI(American National Standards Institute)에서 C를 개정하기 위한 위원회를 구성하였고, 최종 껼과로 ANSI 표준, 또는 ANSI C라는 새로운 C표준이 1988년에 완성되었다.

ANSI C에서는 여러가지 추가된 기능이 있는데. 1. 컴파일시 새로운 규약에 대한 경고를 내준다. 2. 함수의 선언에는 매개변수의 설명이 포함된다. 이를 통해 일치 여부를 체크하도록 문법이 변화되었고 이를 통해 컴파일러가 매개변수 불일치 오류를 더 쉽게 탐지한다. 3. Structure assignment 와 enumerations가 공식적으로 지원받게 되었다. 4. Floating-point(부동소수점) 연산은 단정도 정확도로 계산이 된다. 5. C에 기본으로 포함되는 라이브러리가 많아졌다. 파일 입출력, 형식화 입출력, 메모리 할당, 스트링 조작 등이 정의되었다. 6. 호환성 문제가 없다. 프로그램이 수행되어야할 하드웨어 특성에 맞는 상수집합들을 미리 정의한다. 7. 명시적 형변환(explicit conversion)을 요구한다.

등이 있다.
