2023.1.1. 최초 작성
C언어는 1972년 켄 톰슨과 데니스 리치가 벨 연구소에서 일할 당시 새로 개발된 유닉스 운영 체제에서 사용하기 위해 개발한 프로그래밍 언어이다.
C언어의 정신은 C99 Rationale에서 다음과 같이 묘사하고 있다.
- 프로그래머를 믿어라. (Trust the programmer)
- 프로그래머가 작업을 못하게 방해하지 마라. (Don't prevent the programmer from doing what needs to be done)
- 언어를 작고 간단하게 유지하라. (Keep the language small and simple)
- 명령을 실행하는 방법을 하나만 제공하라. (Provide only one way to do an operation)
- 호환성은 장담할 수 없더라도 빨리 작동하게 만들어라. (Make it fast, even if it is not guaranteed to be portable)
C언어는 다른 언어에 비해 상대적으로 어렵다고 한다. 그 이유가 위에 적혀있다고 생각한다.
C언어는 운영체제를 만들 용도로 만들어진 언어이다. 그 이야기는 제한이 없고 할 수 있는 것이 많다는 것을 의미한다.
C언어는 메모리를 직접 접근하여 사용한다. 요즘의 다른 언어들이 개발자를 믿지 못해서 아주 엄격하게 컴파일하고 오류를 표시한다면 C언어는 반대이다.
C언어는 메모리를 직접 제어하기 때문에 메모리의 구조와 동작 원리를 잘 모르고 사용한다면 어렵다고 느껴지는 것은 당연하다.
프로그래밍 언어를 공부할 때 C언어를 공부해야 하는 이유이기도 하다. C언어를 통해 메모리의 구조와 원리를 잘 이해한다면 다른 언어를 공부할 때 느낌이 다를 것이다.
C언어의 컴파일 과정은 아래와 같다.
소스 코드 --> 전처리 --> 컴파일 --> 어셈블 --> 링킹 --> 실행 파일
알고리즘을 프로그래밍 언어로 코딩한 소스 코드는 .c 확장자를 가진다.
전처리 과정은 컴파일 이전에 사전 작업을 수행하는 것으로 전처리기가 담당한다.
#include처럼 #(샵)으로 시작되는 것을 작업한다. 전처리과정을 거치면 .i 확장자를 가진다.
컴파일 과정을 거치면 어셈블리어가 만들어지는데 문법 오류가 있으면 에러가 발생한다. 컴파일러가 담당하고 확장자는 .s가 된다.
어셈블 과정은 어셈블리어가 기계어로 바뀌는 과정이다. 어셈블러가 담당하며 .o라는 확장자의 오브젝트 파일이라고 부른다.
링킹 과정 이전까지는 여러 개의 파일로 분리되어 있는데 링킹 과정을 거치며 하나로 연결하여 실행 파일을 만들어준다. 프로그래밍 언어에서 미리 만들어져있는 라이브러리도 여기서 합체가 된다.
이러한 과정을 거쳐 완성된 실행 파일은 .exe 확장자를 가지며 실행이 가능하다.
C언어는 컴파일을 진행한 환경에 따라 사용할 컴파일러도 달라야 하며 만들어진 실행 파일은 다른 환경의 컴퓨터에서 작동되지 않을 수 있다.
컴파일 환경이란 CPU의 종류, 운영체제의 종류, 컴파일러의 종류와 버전을 의미한다.
컴파일러도 프로그램으로 여러 종류가 있고 버전도 다양하다.
왜냐하면 C언어도 버전이 있어서 거기에 대응하는 컴파일러 버전도 다 다르다.
C언어의 표준은 지금도 갱신되고 있다. 그래서 과거의 C언어와 지금의 C언어는 조금 다른 부분이 있을 수 있다.
컴파일러의 버전에 따라 특정 C언어 문법이 오류가 날 수 있고 아닐 수 있다는 것이다.
C언어는 2023년 새로운 버전으로 개정을 앞두고 있다.
C언어의 버전은 C95, C99, C11, C18, C23과 같이 표현한다.
https://namu.wiki/w/C(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%20%EC%96%B8%EC%96%B4)
C(프로그래밍 언어) - 나무위키
C언어의 정신은 C99 Rationale에서 다음과 같이 묘사하고 있다. 프로그래머를 믿어라. (Trust the programmer)프로그래머가 작업을 못하게 방해하지 마라. (Don't prevent the programmer from doing what needs to be done)
namu.wiki
https://en.cppreference.com/w/c/language
C language - cppreference.com
en.cppreference.com
'프로그래밍 > C' 카테고리의 다른 글
C언어 입력함수 scanf와 입력 버퍼 (0) | 2023.01.02 |
---|---|
C언어 연산자 (0) | 2023.01.02 |
변수와 변환명세 활용하여 출력하기 with printf (0) | 2023.01.02 |
상수와 특수 문자 출력하기 with printf (1) | 2023.01.02 |
Visual Studio 설치 및 첫 번째 C언어 프로그램 작성 (0) | 2022.12.29 |