본문 바로가기
~ 2024.03/C 언어

[C 언어 기초] C 언어 개요

by Monett 2023. 12. 12.
반응형

K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다.
현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. 

C의 유래

C는 1970년대 초 벨 랩에서 개발된 광범위하게 사용되는 프로그래밍 언어

 

C는 UNIX 운영체제의 산물이다.

UNIX는 어셈블리어로 제작되었는데, 어셈블리어로 제작된 언어들은 디버깅을 하거나 성능을 업그레이드할 때 매우 힘들다는 특징을 갖고 있었다.

 

이러한 단점 때문에 켄 톰슨(UNIX의 개발자)은 좀 더 고급 언어가 필요하다고 생각했고, B 언어를 제작했다.

후에 데니스 리치(K&R 라고도 부르는 The C Programming language 의 저자)가 UNIX 프로젝트에 참여하게 되었고, B를 사용하여 프로그래밍했다.

1970년이 되자, 벨 랩은 PDP-11 컴퓨터에 UNIX 프로젝트를 지원했는데, 그들은 B언어가 PDP-11에는 잘 맞지 않는다는 것을 발견했다.

 

리치는 B의 발전된 언어를 제작했고, New B라는 의미로 NB라는 이름을 지었다.

후에 B에서 더더욱 발전하여 B와는 많이 달라진 형태가 되었는데, 이때 리치는 이것을 C라고 이름 지었다.

 

1973년이 되자 C는 UNIX 전체를 프로그래밍할 수 있을만큼 발전하고 안정화되었다.

C로의 전환은 많은 장점을 낳았는데, 그중 제일 중요한 것이 바로 확장성이다.

벨 랩에선 C가 다른 컴퓨터에서도 돌아갈 수 있게 다양한 C 컴파일러를 제작하고 나서야 UNIX를 다양한 기기에서 사용할 수 있었다. 

구현정의행동(Implementation-defined behavior), 정수 자료형의 64비트, 32비트 크기가 다른 점 등을 이해할 때 C의 역사와 확장성에 대한 내용이 도움이 되었다.

C 기반 언어들

  • C++은 C의 모든 특징을 갖고 있으나, 클래스와 다른 특징들이 추가되어 객체 지향 프로그래밍이 가능하다.
  • Java는 C++에 기반하고 있는데, 그렇기에 C의 여러 특징을 공유하고 있다.
  • C#은 비교적 최근 언어로, C++과 Java에 영향을 받아 만들어졌다.
  • Perl은 본디 비교적 쉬운 프로그래밍 언어였다. 시간이 지나자 C의 많은 특징을 공유하기 시작했다.

C의 장점

  • 효율성 : 애초에 어셈블리어를 대체하기 위해 만들어졌기 때문에, 한정된 메모리 내에서 최대한 빨라야했다.
  • 확장성 : UNIX와 관련이 있었기 때문이고, ANSI와 ISO에 의해 규격화되어 여러 가지의 방언들로 나뉘지 않았다. 또한 C 컴파일러는 상대적으로 규모가 작았고, 프로그래밍을 하기 쉬웠다. 
  • 강력함 : C의 다양한 자료형들과 연산자들은 C를 강력한 언어로 만들어 주었다.
  • 유연성 : C는 자신의 특징을 발현하는데 아주 적은 제한만을 둔다. 예를 들어, C는 한 문자가 정수나 실수에 추가될 수 있게 허용하고 있다. 몇 가지 버그를 발생시키기도 하지만 프로그래밍을 더욱 쉽게 만들어주기도 한다.
  • 표준 라이브러리 : 인풋/아웃품, 문자열 처리 등 여러가지 유용한 함수를 제공한다.
  • UNIX와의 통합 : UNIX, 특히 Linux와 만났을때 최고의 호흡을 보인다. 

C의 단점

  • 에러가 나기 쉬울 수 있다 : C의 유연성에는 이면이 있다. 다른 언어에서는 쉽게 잡힐 실수들이 C 컴파일러에선 잡히지 않을 수 있다. 
  • 이해하기 어려울 수 있다 : 다른 언어들에는 없는 기능들이 여럿 있고, 이러한 기능들이 특히 자주 잘못 이해하는 경우가 많다. 또한 간결하여 너무 똑똑한 프로그래머들이 만든 프로그램은 이해하기 어려울 수 있다.
  • 수정하기 어려울 수 있다 : 애초에 유지보수를 할 생각으로 만든 것이 아니라면 수정하기 매우 어려울 수 있다.

C를 효과적으로 사용하는 법

  • 실수를 줄이는 방법을 익힌다
  • 소프트웨어 도구를 사용한다 : lint 등
  • 코드 라이브러리들을 활용하여 안정화한다
  • 실용적인 코딩 버릇을 들인다
  • 허세 부리지 말고 코드는 간결하게 하라
  • 표준을 지켜라
반응형

'~ 2024.03 > C 언어' 카테고리의 다른 글

[C 언어 기초] 포인터  (0) 2023.12.13
[C 언어 기초] 선택문  (0) 2023.12.13
[C 언어 기초] 표현식  (0) 2023.12.13
[C 언어 기초] 서식 입출력  (0) 2023.12.12
[C 언어 기초] C 프로그램의 구조  (0) 2023.12.12