저자 | Brian W. Kernighan, Dennis M. Ritchie |
옮긴이 | 김석환, 박용규, 최홍순 |
펴낸 곳(펴낸 이) |
휴먼 싸이언스(박주옥), PEARSON |
판(쇄) | 2016년 2월 1일 2판 1쇄 발행 |
리뷰 or 감상 |
이 책을 처음 읽었던 건 2019년 7월이다.
한참 업무(전공) 관련 서적 100권을 읽겠다며 2번째로 집어든 책이다.
이제서야 리뷰를 쓰는 이유는 크게 2가지인데
하나는 지난 1년간 블로그에 기록하는 방법에 대한 다양한 시도를 계속 해보고 있는 중이라 그렇다.
다른 하나는 최근 필요에 의해 발췌독을 하고 있는데
'아, 역시 메뉴얼은 만든 사람이 써야지.'라는 생각이 들었기 때문이다.
말 그대로 이 책은 C언어를 만든 사람들이 쓴 책의 번역서이다.
여타 다른 국내 C언어 서적들과 비슷하면서도 묘하게 다른 매력이 있다.
자동차를 예를들면 마치 '그냥 운전만 잘하면 돼'가 다른 서적들 이라면
이 책은 '이 부분은 요걸 고려했어.' 또는 '엑셀은 이런 고민이 들어가 있어'라는 느낌을 받았다.
약간 과장되긴 했지만, 왜 사람들이 C언어 서적을 추천할 때 이 책을 추천했는지 다시 알 수 있었다.
목차 or 정리 |
Chapter 0. 들어가는 글
Chapter 1. 언어 소개
1.9 문자 배열 38
Chapter 2. 형, 연산자, 수식
Chapter 3. 제어 흐름
Chapter 4. 함수와 프로그램 구조
Chapter 5. 포인터와 배열
5.3 포인터와 배열 138
Chapter 6. 구조체
Chapter 7. 입력과 출력
Chapter 8. UNIX 시스템과의 인터페이스
세부 내용 |
Chapter 0. 들어가는 글
- C는 다목적 프로그래밍 언어이다.
- C 언어의 중요한 아이디어의 출처
1) 마틴 리처즈(Martin Richards)가 개발한 BCPL언어 에서 비롯되었다.
2) BCPL은 B라는 언어를 통해서 간접적으로 C에 영향을 미쳤다.
3) B는 켄 톰슨(Ken Tompson)이 1970년 DEC PDP-7이라는 컴퓨터에 최초의 UNIX 시스템을 위해 만들어진 언어
4) BCPL과 B는 "무형"언어("typeless" language)이다.
- C는 여러가지 데이터 형을 제공
1) 계층적 구조의 유도된 데이터 형 - 포인터, 배열, 유니온
2) 수식 - 연산자(operator)와 데이터(operand)
3) 포인터 : 기계 비의존적으로 주소참조 관련 연산을 할 수 있게 해 줌
4) 잘 구성된 구조적 프로그램을 위한 흐름제어 구조 제공
5) 함수의 리턴 값(반환값)으로 기본형들과 구조체, 유니온, 포인터 가능
6) 함수의 재귀적 호출(되부름) 가능
- 지역변수는 함수호출 시마다 자동으로 매번 새로이 만들어짐
- 함수 정의는 내포적으로 할 수 없으나 변수는 블록 구조체적인 방법으로 정의될 수 있다.
#무슨 말이냐
- 변수는 함수 내부에만 존재하게 할 수 도 있고, 단일 소스 파일 내에서만 공통으로 사용되도록 할 수도 있으며, 또는 프로그램 전체에서 사용되도록 할 수도 있다.
- C는 상대적으로 "저수준"언어이다. 컴퓨터 하드웨어 수준에서 문자, 숫자, 주소에 대해 처리하듯이 이 언어가 처리 할 수 있다. 이러한 데이터들은 산술과 논리적 연산자에 의해 결합되거나 옮겨질 수 있다.
- C는 문자스트링, 집합체, 리스트, 배열 등과 같은 복합 데이터체에 대해 직접적으로 다루는 명령은 가지고 있지 않다.
- 구조체를 한 개의 단위로 취급하여 복사하는 기능은 제공 하지만 배열 또는 스트링 전체에 대해 다루는 기능을 제공하지 않는다.
- 정적 변수 정의나 함수의 지역변수에 의한 스택 취급 외에는 메모리 할당 기능을 언어에서는 제공하지 않는다. 즉, 힙이나 메모리 폐영역회수 기능이 없다.
- C는 테스트, 루핑, 묶기, 부프로그램과 같은 단일 쓰레드 제어흐름만을 제공할 뿐이다.
다중 프로그래밍, 병렬 작동, 동기화, 코루틴(coroutine)을 제공하지 않는다.
- 1988년 ANSI C 표준이 완성
- 가장 중요한 변화 : 함수선언과 함수정의 관련한 새로운 문법
1) 함수의 선언에는 함수 매개변수의 설명이 포함
2) 일치 여부를 체크하도록 문법이 변화
- 작은 변화
1) 구조체 할당과 열거형 데이터가 공식적으로 언어의 지원을 받음
2) 부동소수점 연산은 단정도 정확도로 계산됨
3) 부호 없는 데이터형에 대한 연산 성질이 분명해짐
- 두번째 중요한 변화 : C에 기본으로 포함되는 라이브러리의 정의
1) 운영체계에 접근하기 위한 함수들이 정의 (ex:파일입출력)
2) 형식화 입출력, 메모리 할당, 스트링 조작 등과 같은 것들이 정의
3) 표준헤더 집합은 함수와 데이터형 정의에 동일한 접근법을 제공
- C는 강한 데이터형을 요구하는 언어가 아니지만, 형 검사 기능은 강화되고 있다.
Chapter 1. 언어 소개
1.1 시작
- 프로그램을 작성하고 실행시키는 단계
1) 프로그램이 들어 있는 텍스트 파일 생성 및 디스크에 저장
2) 컴파일
3) 링크
4) 실행
- C프로그램은 항상 하나 이상의 함수로 구성된다. 주 프로그램의 이름은 꼭 main이라고 해주어야 한다.
- 인용 부호("") 속에 있는 문자들은 "문자열", "스트링 상수"라고 불린다.
1.2 변수와 수식 표현
- printf함수는 C의 표준 입출력 라이브러리에 있다. C 언어 자체에는 입출력 기능이 없다.
- 많은 기능을 라이브러리 넣은 것은 컴퓨터의 기종에 상관없이 동일한 동작을 하도록 해주기 위해서인데, printf의 동작은 ANSI 표준에서 정의하고 있다.
- 정수형과 실수형에 어떤 연산을 하면 정수형은 실수형으로 바뀌어 연산됨(좀 더 확실히 하고 알아보기 쉬우려면 정수형을 실수형을 표현한다.)
1.3 for 문
- C에서는 어떤 변수가 있어야 될 자리에 수식이 들어가도 상관없지만 그 형(type)은 맞아야 한다.
1.4 상수 정의
- 숫자를 그대로 두면 나중에 프로그램을 보는 사람이 그 숫자가 뭔지 모르는 경우가 있다. #define을 이용해 상수를 정의한다
- 계속 변하는 변수와는 성질이 다르다.
- 상수는 문자나 문자열도 될 수 있다.
- 보통 상수 이름은 대문자로 쓴다.
- 상수 정의 뒤에는 세미콜론이 없다.
1.5 문자 입출력
- 문자로 되어 있는 어떤 '파일'은 실제로는 그 문자에 해당하는 숫자(ASCII 번호)로 기억되어 있게 된다.
Chapter 4. 함수와 프로그램 구조
4.3 외부변수
- 외부변수들은 바깥에서 정의되므로 여러 다른 함수들이 사용할 수 있다.
- 외부변수는 영구적이다
Chapter 5. 포인터와 배열
5.3 포인터와 배열
5.11 함수의 포인터
- C에서 함수는 변수가 아니지만 함수의 포인터는 정의할 수 있다.
- 이 포인터는 매개변수로 사용될 수도 있고 배열의 원소로 사용될 수도 있는 등 여러 가지 방법으로 조작이 가능하다.
- 함수 포인터를 사용시 괄호는 꼭 있어야 한다.
Chapter 7. 입력과 출력
7.6 에러 처리 : stderr와 exit
- 에러를 알리는 두가지 방법
1) fprintf에 의해 만들어진 에러 메시지를 stderr로 보내면 에러 메시지가 사용자 화면에 출력
2) 표준 라이브러리 함수 exit를 사용하는 방법
a. 호출되면 프로그램 수행이 끝난다.
b. exit의 리턴 값은 다른 프로그램에서도 사용할 수 있으므로 그 프로그램 수행의 성공 여부를 검사하는 프로그램을 작성할 수 있다.
c. exit가 0 값을 리턴하면 정상, 0 이 아닌 값을 리턴하면 대개 비정상적이라는 암시를 나타낸다
d. exit는 열린(open) 파일에 대해 fclose를 호출하여 버퍼를 지우고 닫는다.(close)
e. main 함수에서는 return expr이라고 표현하는 것과 exit(expr)라고 표현하는 것은 똑같다.
f. exit는 다른 함수로부터 호출할 수 있는 유리한 점을 가지고 있다.
'책을 읽.쓰. > IT' 카테고리의 다른 글
<데이터를 부탁해> 전익진 (13) | 2020.05.12 |
---|---|
<파이썬 웹 스크래핑 2/e> (0) | 2020.04.13 |
(6/10 ~ 7/8) 2,3,4,5주차 후기 (0) | 2019.07.08 |
[#1][리뷰]<실용주의 프로그래머> 앤드류 헌트, 데이비드 토머스 (0) | 2019.06.09 |
(6/3 ~ 6/9) 1주차 후기 (0) | 2019.06.09 |