C언어를 처음 배울 때 봤던 책이다. 그동안 까먹은 것도 있어서 오랜만에 다시 이 책을 보면서 C에 대해서 정리하려고한다.
아래 사이트에서 책의 내용을 볼 수 있다.
더북(TheBook): 모두의 C 언어
thebook.io
1. C언어의 유래
C언어는 1972년 벨(Bell)연구소의 연구원 데니스 리치(Dennis Ritchie)에 의해서 개발되었다.
왜 이름이 C언어일까? 사실 큰 의미는 없다. 벨 연구소에서 처음 진행한 프로젝트 이름이 A 프로젝트, 그 다음에 진행한 프로젝트 이름이 B 프로젝트, 그 이후에 C 프로젝트가 수행되었다. 그러다가 C 프로젝트에서 유닉스를 개발하는 과정 중에, 부산물로 컴퓨터 언어가 데니스 리치 연구원에 의해 만들어졌고, C 프로젝트 이름에 따라 'C'언어라고 명명되었다.
2. 통합 개발 환경
쉽게 말하면,
대장장이가 일을 할 때 필요한 것 - 망치, 연장
프로그래머의 연장 - 통합 개발 환경(Integrated Development Environment, IDE)
정확하게 말하면,
프로그래밍 언어를 개발하기 위한 환경 (ex. 마이크로소프트 비주얼 스튜디오)
3. 컴파일과 실행 : 프로그램의 일생
코드가 어떻게 작성되고 결과가 나오는지 알아보자.
우리가 작성한 코드를 소스 코드라고 한다.
#include <stdio.h>
main()
{
printf("Hello, World");
}
소스 코드는 프로그래머가 직접 작성한 프로그램 파일이며 C언어에서는 *.c 확장자를 가진다. 소스 코드는 우리가 직접 작성한 텍스트다. 이러한 텍스트를 컴퓨터가 이해할 수 있을까? 컴퓨터는 이해하지 못한다. 컴퓨터는 0과 1밖에 모른다. 따라서 컴퓨터에게 이 소스 코드를 이해시키려면 먼저 0과 1로 바꿔줘야한다. 이렇듯 우리가 작성한 소스 코드를 0과 1로만 구성된 코드로 변환하는 과정을 컴파일(compile)이라고 한다.
컴파일 과정을 통해 소스 코드는 컴퓨터가 이해할 수 있는 또 다른 언어인 기계어로 변환된다. 이렇게 기계어로 변환된
파일을 목적 파일(object file)이라고 한다.
소스 코드(*.c) -> 컴파일 -> 기계어로 변환된 목적 파일(*.obj)
이제 기계어가 생성되었으니 컴퓨터가 소스 코드의 의미를 이해할 수 있을까? 아니다.
위 소스 코드의 printf() 함수는 stdio.h 라는 헤더 파일에 그 내용이 저장되어 있다. 즉, printf() 함수를 사용하려면 stdio.h 파일을 소스 코드에 포함시켜야하는데, 그 명령이 바로 첫 번째 줄에 있는 #include <stdio.h>인 것이다.
기계어로 작성된 목적 파일은 링크(link), 즉 연결 과정을 거친다. 연결 과정이라는 의미는 헤더 파일을 내가 작성한 소스 코드에 연결한다는 의미이다. 헤더 파일을 연결하고 이제 내 프로그램에 싣는 로더(loader)과정까지 거치고 나면 비로소 소스 코드는 실행될 준비를 모두 갖춘 상태가 된다. 그런 다음 파일 확장자가 *.exe인 실행 파일(execution file)이 생성되어 소스 코드의 수행 결과가 화면에 나타나는 것이다.
기계어로 변환된 목적 파일(*.obj) -> 링크 & 로더 -> 실행 파일(*.exe)
비주얼 스튜디오에서 Ctrl + F5를 눌러 소스 코드를 실행한다는 의미는 컴파일, 링크, 로더 과정을 한번에 수행한 것.
4. 자료형
컴퓨터가 일을 하고, 명령어를 처리하려면 다양한 정보를 저장해야 한다. '값을 저장한다'는 말은 컴퓨터에 있는 하드웨어인 '메모리(memory)'에 저장한다는 의미이다. HDD, SSD, 플래시 메모리, SRAM, DRAM등이 모두 '메모리'이다.
램(RAM, Random access memory)은 데이터를 일시적으로 저장하는 휘발성 메모리로, 종류에는 정적 램(Static Ram)과 동적 램(Dynamic Ram)등이 있다. 동적 램은 정적 램보다 구조가 훨씬 간단하여 저렴하지만 더 느리다. 따라서 개인용 컴퓨터, 워크스테이션 등의 대용량 메인 메모리에 사용되는 반면 정적 램은 더 작고 빠른 캐시 메모리에 사용된다.
컴퓨터는 모든 정보를 0과 1, 즉 2진수체계로 저장한다. 숫자와 문자도 0과 1로 저장한다. 컴퓨터에서 숫자나 문자로 구성된 정보의 값을 저장하려면 정보의 최소 저장 단위인 비트(bit)를 사용한다. 8bit = 1byte
참고
- 모두의 C언어 책
'C, C++ > C, C++' 카테고리의 다른 글
[C] 4가지의 메모리 저장소 (스택, 힙, 데이터, 코드 영역) (0) | 2022.01.30 |
---|---|
[C] C언어에서 음수를 표현하는 방법 (0) | 2022.01.07 |
컴파일(Compile) 과정 (0) | 2022.01.05 |
[C] 모두의 C언어 복습&정리 (2) (0) | 2022.01.03 |
[C/C++] #include 시에 < > , " " 의 차이점 (0) | 2021.12.27 |