98 모던 C 총정리
먼저 알아야 할 것
돌아보기
1장에서 이 책은 “옛 어법의 관성으로 쓰인 입문서가 아니라 오늘의 C에서 출발하는 입문서”를 표방했다. 그러면 이 책을 다 읽은 지금, 독자가 배운 C는 옛 C와 무엇이 다른가?
답. 문법의 목록이 다른 것이 아니라 기준이 다르다. 옛 어법의 책은 “이렇게 쓰면 동작한다”를 가르치고, 이 책은 “이렇게 쓰면 계약 안이다”를 가르쳤다 — 초기화하고 쓰기(23장), 경계와 크기를 함께 다루기(38장), 실패를 값으로 확인하기(51장), 계약 밖의 지름길을 피하기(52장), 도구로 검사하기(17장). C23의 새 문법들은 그 기준을 더 쉽게 지키게 해 주는 도구로 등장했다. 아래 회고가 그 목록이다.
이 장의 필요성과 맥락
이 장이 끝나면
이 장에서 답할 질문
- 여기서 어디로 가면 좋은가?
98.1 회고 — 이미 써 온 C23
이 책은 새 표준을 따로 소개하지 않고, 필요한 자리에서 자연스럽게 썼다. 모아 보면 이만큼이다.
| C23의 것 | 처음 만난 곳 | 무엇을 쉽게 만들었나 |
|---|---|---|
bool·true·false 키워드 | 30장 | 헤더 없이 판단을 값으로 |
nullptr | 36장 | NULL의 모호함 제거 |
| 2의 보수 확정 | 7장 | 부호 표현의 이식성 고민 종료 |
[[nodiscard]] | 37·51장 | 실패 확인을 잊는 실수를 컴파일러가 차단 |
[[fallthrough]] | 31장 | switch 폴스루의 의도를 문서로 |
ckd_add 계열 | 52장 | 오버플로를 UB가 아니라 값으로 |
alignof | 37장 | 정렬 요구를 언어 차원에서 질의 |
| 삼중자 제거 | 9장 | 문자 코드 시대의 흉터 정리 |
va_start의 완화 | 58장 | 가변 인자의 군더더기 제거 |
표 98.1
한 방향이 보인다 — 계약을 더 명시적으로, 실수를 더 빨리 잡히게. 1장에서 “C 자신도 변화의 조짐을 보이고 있다”고 한 것의 구체적 내용이 이 표다.
98.2 모던 C 관행 — 한 장의 지침
이 책 전체를 실무 수칙으로 압축하면 이렇다.
빌드와 도구. 경고를 켠다(-Wall -Wextra). 시험 실행은 새니타이저와 함께(ASan·UBSan). 가능하면 두 컴파일러로 교차 검증한다(17장).
선언과 타입. 선언과 동시에 초기화한다. 바꾸지 않을 것은 const로 둔다. 크기가 계약인 자리에는 <stdint.h>의 고정 폭 타입을 쓴다. 크기·인덱스는 size_t 계열로 일관되게(29장의 부호 섞임 함정).
기억. 경계는 언제나 명시적으로 — 배열과 길이는 함께 다닌다. 포인터는 쓰기 전에 유효성을 확인한다. 동적 할당은 소유자를 정하고, 해제 후에는 포인터를 비운다. 가능하면 자동 수명으로 해결한다(38·45장).
오류. 실패는 값으로 알리고, 반환값은 확인한다. 내부 불변식은 assert, 바깥에서 온 것은 실행 중 검사(51장).
계약. “내 컴퓨터에서 돌았다”가 아니라 “추상 기계 위에서 옳은가”로 판단한다(12·52장).
부품. 표준 라이브러리의 계약을 알고 고르고, 반복되는 위험 지대에는 검사가 내장된 부품을 얹는다(61장·제12부).
문. 여기서 어디로 가면 좋은가?
답. 세 갈래를 권한다. 깊이 — 이 책이 문을 열어 둔 곳들: 자료구조와 알고리즘(46장의 연결 구조), 동시성(12장의 멀티코어와 C11 원자), 시스템 프로그래밍(파일·네트워크는 플랫폼 API의 세계다). 너비 — 이웃 언어들: C++·Rust·Zig를 볼 때, 이 책에서 배운 기억·계약·표현의 감각이 그대로 통역된다(1장에서 예고한 대로다). 실전 — 96장에서 이름을 든 프로젝트들의 소스를 직접 읽는 것. SQLite나 curl 같은 잘 쓰인 C 코드는 이 책의 모든 주제가 실물로 살아 있는 교재다.
그리고 표준 문서 자체가 이제 읽을 수 있는 텍스트가 되었다는 것도 기억해 둘 만하다 — “계약서”라는 관점으로 보면, 그 무뚝뚝한 문서가 왜 그렇게 쓰였는지 이해된다.
98.3 다음에 읽을 책, 그리고 표준 문서
여기서 멈추지 않을 독자를 위해 읽을거리를 따로 모아 두었다 — 부록 D가 그것이다. C는 입문서 다음 칸이 유난히 비어 있는 언어인데, 최근 몇 해 사이 그 칸을 메우는 책들이 나오고 있다. 부록에는 그 책들의 장단점과 함께, 이 책이 내내 “계약서”라 불러 온 표준 문서를 실제로 구하는 방법 (구입과 무료 초안 내려받기)을 적어 두었다.
98.4 마지막으로
이 책은 4장에서 컴퓨터를 세 부품으로 그리는 것으로 시작했다. 그 그림은 곧 정직하게 무너졌고 — 기억은 사다리가 되고, 실행은 겹쳐지고, 편집자가 끼어들었다 — 그 자리에 남은 것이 계약이었다. C를 안다는 것은 문법을 외우는 일이 아니라 그 계약을 읽을 줄 아는 일이라는 것, 이 책이 하고 싶었던 말은 그것 하나다.
읽는 것만으로 여기까지 온 독자에게, 이제 남은 것은 하나뿐이다 — 읽은 것을 자기 코드로 써 보는 것. 좋은 여정이 되기를.