=> UNIX 운영체제에서 사용하기 위해 만들어진 어셈블리어 BCPL
=> 하지만 어셈블리어로 만들어진 프로그램은 디버깅이 힘들고, 사용하기 어려웠음
=> 톰슨 : BCPL -> B (B는 PDP-11과 같은 컴퓨터에 적절하지 않은 문제점이 있었음)
=> 데니스 리치 : B -> NB -> C(NB)
표준화
=> 'The C Programming Language' (K&R) : 최초의 C 언어 책으로, C의 바이블
=> C 프로그래머가 점차 늘어나기 시작
=> 1980년대 이후 C는 다른 OS에서도 사용되기 시작 (특히, 당시 빠르게 성장하던 IBM PC 플랫폼)
=> 문제점 : K&R은 몇 가지 기능에 불분명한 내용을 포함하여, 컴파일러가 다르게 처리
=> 많은 수정을 거쳐, 국제 표준화기구에서 1990년에 표준 승인을 받음 (C90) -> (1999년 : C99)
C 기반 언어
=> C++ : C의 모든 기능 + 객체지향
=> Java : C++ 기반
=> C# : C++과 Java에서 파생된 더 최근의 언어
=> Perl : 간단한 스크립팅 언어였으나, 시간이 지나면서 C의 많은 기능 채택
C의 철학
1. C는 low-level language이다.
=> 시스템 프로그래밍에 적합한 언어 : 기계수준(바이트, 주소 등)으로의 접근을 제공
=> 컴퓨터의 내장기기와 근접한 방식으로 연산, 명령 수행 : 빠른 프로그램 동작
2. C는 small language이다.
=> 다른 언어에 비해 매우 제한적인 기능만을 제공 : 이를 위해 표준 라이브러리에 크게 의존
3. C는 관대한 언어이다.
=> 프로그래머에게 관대함 : 다른 언어에 비해 오류 체크가 정밀하지 않음
C 언어의 장단점?
- C의 장점
1. 효율성
=> C는 제한된 메모리에서 빠르게 구동될 수 있음
2. 이식성
=> UNIX와의 연계성, 국제 표준의 존재 : 언어의 분화를 막음
=> C 컴파일러는 가볍고 쉽게 쓰여짐 : 언어가 폭넓게 활용될 수 있음
3. 강력함
=> 방대한 종류의 데이터 타입, 연산자 : 짧은 코드로도 다양한 명령 수행
4. 유연성
=> 시스템 프로그래밍 뿐만 아니라 모든 분야의 프로그래밍에서 사용됨
=> 관대함 : 다른 언어에서는 오류로 발생되지만 C에서는 그렇지 않음
5. 표준 라이브러리의 존재
6. UNIX와의 관계
- C의 단점
1. 오류
=> 유연성, 관대함 : 오류를 감지하지 못하는 경우가 자주 발생
=> 오유를 찾기 쉽지 않음 : 세미콜론, 연산자 기호 등
2. 이해의 어려움
=> 유연성 : 코드를 이해하기 어렵게 함
=> 너무 간결하게 짜여진 코드를 이해하는 데 어려움이 있음
3. 수정의 어려움
=> C는 큰 덩어리로 구성되어 있음 : 유지보수가 어려움