모던 C
C만이 가진 고유한 개념과 작성 기법을 배워
'더 완전한' C 프로그램을 작성할 수 있다!
C 언어는 50년 이상된 프로그래밍 언어이며, 처음 등장한 이후 컴퓨터, 전화기, 카메라, 냉장고, 자동차 등 프로그래밍 인터페이스를 가진 거의 모든 기기에서 사용되고 있다. 이처럼 C로 만든 프로그램이나 시스템은 어디서나 볼 수 있지만 제대로 된 C 관련 자료는 굉장히 드물다. ISO C 표준 공동 편집자인 저자는 최신 C 표준을 기반으로 C만이 가진 고유한 개념과 작성 기법을 소개하고, C 언어에서 특별히 가치 있게 눈여겨볼 부분을 주로 설명한다.
«모던 C»는 1~8장을 공개합니다.
목차
- 레벨 0 만남
- 01 들어가며
- 1.1 명령형 프로그래밍
- 1.2 컴파일하고 실행하기
- 1.3 요약
- 02 프로그램의 핵심 구조
- 2.1 문법
- 2.2 선언
- 2.3 정의
- 2.4 문장
- 2.4.1 반복
- 2.4.2 함수 호출
- 2.4.3 함수 리턴
- 2.5 요약
- 레벨 1 친숙
- 03 결국은 제어
- 3.1 조건부 실행
- 3.2 반복문
- 3.3 다중 선택
- 3.4 요약
- 04 계산 표현하기
- 4.1 산술
- 4.1. 1 +, -, *
- 4.1.2 나눗셈과 나머지
- 4.2 오브젝트를 수정하는 연산자
- 4.3 불 연산
- 4.3.1 비교 연산
- 4.3.2 논리 연산
- 4.4 삼항 연산자와 조건 연산자
- 4.5 평가 순서
- 4.6 요약
- 05 값과 데이터
- 5.1 추상 상태 기계
- 5.1.1 값
- 5.1.2 타입
- 5.1.3 바이너리 표현과 추상 상태 기계
- 5.1.4 최적화
- 5.2 기본 타입
- 5.3 값 지정하기
- 5.3.1 복소수 상수
- 5.4 암묵적 변환
- 5.5 초기자
- 5.6 이름 있는 상수
- 5.6.1 읽기 전용 오브젝트
- 5.6.2 열거형
- 5.6.3 매크로
- 5.6.4 복합 리터럴
- 5.7 바이너리 표현
- 5.7.1 부호 없는 정수
- 5.7.2 비트 집합과 비트 단위 연산자
- 5.7.3 시프트 연산자
- 5.7.4 불 값
- 5.7.5 부호 있는 정수
- 5.7.6 고정폭 정수 타입
- 5.7.7 부동 소수점 데이터
- 5.8 요약
- 06 파생 데이터 타입
- 6.1 배열
- 6.1.1 배열 선언
- 6.1.2 배열 연산
- 6.1.3 배열 길이
- 6.1.4 매개변수로 사용하는 배열
- 6.1.5 스트링은 특별하다
- 6.2 불투명 타입으로 사용하는 포인터
- 6.3 구조체
- 6.4 타입 이름 새로 짓기: 타입 앨리어스
- 6.5 요약
- 07 함수
- 7.1 간단한 함수
- 7.2 main은 특별하다
- 7.3 재귀호출
- 7.4 요약
- 08 C 라이브러리 함수
- 8.1 C 라이브러리의 기본 속성과 제공 함수
- 8.1.1 헤더
- 8.1.2 인터페이스
- 8.1.3 오류 검사
- 8.1.4 경계값 검사 인터페이스
- 8.1.5 프로그램 사전조건
- 8.2 수학 함수
- 8.3 입력, 출력, 파일 조작
- 8.3.1 서식을 적용하지 않은 텍스트 출력
- 8.3.2 파일과 스트림
- 8.3.3 텍스트 IO
- 8.3.4 서식 지정 출력
- 8.3.5 서식 없는 텍스트 입력
- 8.4 스트링 처리와 변환
- 8.5 시간
- 8.6 런타임 환경 설정
- 8.7 프로그램 종료 및 어서션
- 8.8 요약
- 레벨 2 이해
- 09 스타일
- 9.1 코드 서식
- 9.2 이름 짓기
- 9.3 요약
- 10 구성과 문서화
- 10.1 인터페이스 문서화
- 10.2 구현
- 10.3 요약
- 11 포인터
- 11.1 포인터 연산
- 11.2 포인터와 구조체
- 11.3 포인터와 배열
- 11.4 함수 포인터
- 11.5 요약
- 12 C 메모리 모델
- 12.1 균일 메모리 모델
- 12.2 유니온
- 12.3 메모리와 상태
- 12.4 불특정 오브젝트에 대한 포인터
- 12.5 명시적 변환
- 12.6 이펙티브 타입
- 12.7 정렬
- 12.8 요약
- 13 스토리지
- 13.1 malloc과 친구들
- 13.2 스토리지 기간, 수명, 가시성
- 13.3 보충 설명: 오브젝트를 정의하기 전에 사용하기
- 13.4 초기화
- 13.5 보충 설명: 머신 모델
- 13.6 요약
- 14 고급 처리 과정과 IO
- 14.1 텍스트 처리
- 14.2 서식 지정 입력
- 14.3 확장 문자 집합
- 14.4 바이너리 스트림
- 14.5 에러 검사와 클린업
- 14.6 요약
- 레벨 3 숙달
- 15 성능
- 15.1 인라인 함수
- 15.2 restrict 지정자 사용하기
- 15.3 측정과 인스펙션
- 15.4 요약
- 16 함수 같은 매크로
- 16.1 함수 같은 매크로 작동 방식
- 16.2 인수 검사
- 16.3 호출 문맥에 접근하기
- 16.4 디폴트 인수
- 16.5 가변 길이 인수 리스트
- 16.6 타입 독립 프로그래밍
- 16.7 요약
- 17 다양한 제어 흐름
- 17.1 복잡한 예
- 17.2 순서 정하기
- 17.3 숏점프
- 17.4 함수
- 17.5 롱점프
- 17.6 시그널 핸들러
- 17.7 요약
- 18 스레드
- 18.1 간단한 스레드 제어
- 18.2 경쟁 상태가 없는 초기화와 소멸
- 18.3 스레드 로컬 데이터
- 18.4 크리티컬 데이터와 크리티컬 섹션
- 18.5 상태 변수를 이용한 통신
- 18.6 복잡한 스레드 관리
- 18.7 요약
- 19 아토믹 접근과 메모리 일관성
- 19.1 선행 관계
- 19.2 동기화를 지원하는 C 라이브러리 호출
- 19.3 순차적 일관성
- 19.4 그 밖의 일관성 모델
- 19.5 요약