개요
독학으로 C를 시작하면서 과제에서 막힐 때마다 구글링으로 급하게 해결만하고 넘어가곤 했다. 그러다 보니 틀린 정보를 맞는 것으로 착각하기도 하고 기초와 디테일이 부족하다고 느꼈다. 그래서 앞으로 책을 바탕으로 공부한 내용을 정리해 보려고 한다. 매우매우 기초적인 내용이기 때문에 지루하게 느껴질 수도 있을 것 같다. 최대한 간결하게 작성해 보자.
목차
1.
C언어의 유래
2.
C 표준화
요약
•
C는 어셈블리어를 대체하기 위한 고급 언어로서 만들어졌다.
•
C가 만들어진 초반에는 변경이 잦았고 표준 설명서가 없어서 여러 문제가 있었다.
•
C를 표준화하기 위한 노력의 결과 89년도에 ANSI, 90년도에 ISO로부터 승인을 받았다.
•
이 당시 표준화된 C언어를 C89 또는 C90이라고 부른다.
•
이후 C표준은 C99, C11, C17, C23까지 발전했다.
C언어의 유래
- C언어는 어떻게, 왜 만들어졌을까?
C는 연구소에서 UNIX를 만들던 ‘켄 톰슨’과 ‘데니스 리치’ 등에 의해 만들어졌다. UNIX는 처음에 어셈블리어로 제작 되었는데, 어셈블리어는 디버깅하기가 힘들고 성능을 업그레이드 하기가 어려웠다. 그리고 하드웨어에 의존도가 높다는 단점이 있었다. (이를 ‘이식성’이 낮다고 한다.)
톰슨은 UNIX개발을 계속 하려면 좀 더 고급 언어가 필요하다고 생각해 ‘B언어’를 만들었다. 이후에 리치가 B언어를 발전시켜 ‘NB’를 만들었고 더더욱 발전시켜 초반의 B와는 많이 달라진 형태가 되었는데 이 것에 이름을 붙인 것이 ‘C언어’이다.
어셈블리어와 C로 작성된 hello world 출력 프로그램을 비교해 보자
adosseg
.model small
.stack 100h
.data
hello_message db 'Hello, World!',0dh,0ah,'$'
.code
main proc
mov ax, @data
mov ds, ax
mov ah, 9
mov dx, offset hello_message
int 21h
mov ax, 4C00h
int 21h
main endp
end main
Assembly
복사
어셈블리어로 작성 (출처 - 위키백과)
#include<stdio.h>
int main()
{
printf("Hello, World!\n");
}
C
복사
C로 작성 (출처 - 위키백과)
C 표준화
- 표준화 이전에 있었던 문제들
- ‘C89’, ‘C99’의 의미
C가 만들어지고 막 발전하던 당시에는 표준이 정해지지 않았다. 대신 ‘The C Programming Language’라는 책이 출간되어 표준처럼 여겨졌지만 일부 기능에 대한 설명이 구체적이지 않았다.
C로 작성된 프로그램은 재컴파일을 거치면 다양한 운영체제와 하드웨어에서 사용할 수 있다는 장점이 있었다. 이를 이식성(Portability)이라고 부른다. 그런데 책의 설명이 명확하지 않으니 C컴파일러를 작성한 사람마다 해석이 제멋대로였다. 이식성 문제가 생긴 것이다.
게다가 C는 책이 출판된 이후에도 계속해서 변경 됐는데 표준 설명서가 없으니 여러가지 방언이 생겼다. 이 때문에 C의 가장 큰 장점인 확장성도 활용할 수가 없게 됐다. 원래는 C를 사용하면 라이브러리와 모듈을 개발할 수 있어서 프로그램을 구조화하기가 쉽다. 그러면 복잡하고 큰 프로젝트도 잘 동작하게 된다. 이를 C의 확장성(Scalability)이라고 부른다. 언어 자체가 확장을 지원한다는 것이다. 그런데 방언을 사용해 개발한 모듈은 다른 방언을 사용한 프로그램에 가져와 쓸 수가 없기 때문에 확장성 문제가 생긴 것이다.
‘The C Programming Language’ 2판까지 나왔다. 아직까지도 C언어의 바이블로 불린다. (사진출처 - yes24)
이러한 문제들 때문에 C를 표준화하기 위한 작업이 시작되었다. 몇년간 수정을 거쳐 1989년도에 ANSI(미국 규격협회)의 승인을 받아 드디어 공식화 되었다. 1990년에는 ISO(국제표준화기구)에서도 승인을 받았다. 이 당시 표준화된 C언어를 C89 또는 C90이라고 부르는데 대부분의 컴파일러는 두 개를 동일한 것으로 간주한다. 이후 99년도에 대대적인 변화가 일어나 C99로 개선 되었고 C11, C17, C23까지 발전했다.
아쉽지만 C언어를 배우다보면 표준이 아닌 내용도 접하게 된다. 표준을 지키지 않으면 컴파일러가 변경 되었을 때 문제가 생길 수 있는데 큰 프로젝트를 다루는 회사에서는 큰 사고로 이어질 수 있다. 비표준을 쓰더라도 표준과의 차이를 알고 쓰거나 안전하게 설정을 해두면 괜찮지만 (중상급 이상이 되면 표준과 비표준을 구분할 수 있게 된다고 한다…) 초반에는 표준을 기준으로 공부하는 것이 좋다.
다음에는 C언어의 장단점과 C를 효과적으로 사용하는 법에 대해 써보려고 한다. (제발!)
참고 자료
책
C Programming: A Modern Approach (C 프로그래밍: 현대적 접근)
윤성우의 열혈 C프로그래밍