참고 문헌과 출처
이 책이 기대고 있는 문헌과, 본문에서 사례로 든 사건들의 출처를 모았다. 표준 문서를 구하는 방법은 부록 D에 있다.
표준 문서
- ISO/IEC 9899:2024 (C23) — 이 책의 기준 표준. 널리 참조되는 무료 문서는 N3220이지만, 이는 C23 발행 직후의 작업 초안이다(부록 D 참고).
- ISO/IEC 9899:2018 (C17), 9899:2011 (C11), 9899:1999 (C99), 9899:1990 (C89/C90) — 판을 거슬러 확인할 때. 초안 N2176·N1570·N1256.
- IEEE 754 — 부동소수점 산술 표준(8·50장의 근거).
- The Unicode Standard — 문자 집합과 인코딩, 정규화(9장).
- POSIX (IEEE Std 1003.1) — 표준 C 밖의 시스템 인터페이스(93장의 배경).
언어의 역사
- Dennis M. Ritchie, “The Development of the C Language” (1993) — CPL→BCPL→B→C의 계보와 초기 설계 결정에 대한 창시자의 서술(4·12장).
- Brian W. Kernighan, Dennis M. Ritchie, The C Programming Language (1978, 1988) — 이른바 K&R. C89 이전과 이후를 가르는 기준점.
- WG14 문서 저장소(
open-std.org) — 제안서와 결함 보고서. “이 조항이 왜 이렇게 되었나”의 1차 자료.
인용 서식
이 책의 모든 서지는 ACM 참고문헌 서식(ACM Reference Format)을 따른다. 부록 D 에서 밝힌 그 규약을 여기서도 그대로 지킨다.
| 자료의 종류 | 적는 순서 |
|---|---|
| 책 | 저자. 연도. 제목 (판). 출판사, 지역. ISBN. |
| 학술 발표 | 저자. 연도. 논문 제목. In 논문집 제목. 발행처, 개최지. URL. |
| 기술 보고서 | 저자. 연도. 제목. 보고서 번호, 기관, 지역. URL. |
| 규격·표준 | 발행 기관. 연도. 제목 (판·번호). |
| 보안 권고·CVE | 식별자. 연도. 발행 기관. URL. |
| 온라인 글·메일 | 저자. 연도. 제목. 매체, 날짜. URL. |
표 98.1
세 가지를 지킨다. 연도는 그 판의 연도, URL 은 되도록 1차 자료(발행 기관이 스스로 올린 것), 그리고 본문의 각주와 이 목록이 같은 자료를 가리킨다. 각 항목 끝의 괄호는 이 책에서 그 자료를 인용한 장이다.
이 책이 인용한 사건들
본문에서 일화로 든 사건들의 1차 자료다. 본문의 해당 자리에도 각주로 같은 출처를 달아 두었다.
ARIANE 5 Flight 501 Failure: Report by the Inquiry Board. 1996. European Space Agency / CNES, Paris.
sci.esa.int/web/cluster/-/38889-ariane-501-report-by-board-of-inquiry— 64비트 부동소수를 16비트 정수로 변환하다 난 넘침이 유도 시스템을 멈춰 세웠다. 발표문 쪽은esa.int에 있다. (29장)CVE-2014-1266. 2014. National Vulnerability Database, NIST.
nvd.nist.gov/vuln/detail/CVE-2014-1266— 애플 Secure Transport 의 이른바 “goto fail”. 중괄호 없는if아래 같은 문장이 두 번 적혀 서명 검증이 통째로 건너뛰어졌다. (31장)Eugene H. Spafford. 1988. The Internet Worm Program: An Analysis. Technical Report CSD-TR-823, Purdue University, West Lafayette, IN.
spaf.cerias.purdue.edu/tech-reps/823.pdf— 웜의 전파 경로를 역컴파일로 분석한 1차 보고서.fingerd가 쓰던gets의 버퍼 넘침이 경로 중 하나였다. (42·64장)Tim Newsham. 2000. Format String Attacks. White paper, Guardent, Inc.
faculty.digipen.edu/~dvolper/copies/tn-usfs.pdf— 형식 문자열 취약점을 부류로 정리한 초기 문헌. 분류 자체는 CWE-134 로 정리되어 있다(cwe.mitre.org/data/definitions/134.html). (61·64장)Scott A. Crosby and Dan S. Wallach. 2003. Denial of Service via Algorithmic Complexity Attacks. In Proceedings of the 12th USENIX Security Symposium. USENIX Association, Washington, DC.
usenix.org/conference/12th-usenix-security-symposium/…— 자료구조의 최악 케이스를 일부러 만들어 서비스를 멈추는 공격. 2011년 여러 웹 프레임워크가 같은 방식의 해시 충돌 공격에 노출된 일의 이론적 뿌리다. (85·92장)DSA-1571-1 openssl — predictable random number generator (CVE-2008-0166). 2008. Debian Security Advisory, 2008-05-13.
lists.debian.org/debian-security-announce/2008/msg00152.html— 배포판이 넣은 한 줄의 변경이 난수원을 좁혀, 2년 가까이 생성된 키가 전부 예측 가능해졌다. 추적 항목은security-tracker.debian.org/tracker/DSA-1571-1. (93장)Kees Cook. 2018. VLA removal for v4.20-rc1. Linux kernel mailing list, 2018-10-28.
lkml.iu.edu/hypermail/linux/kernel/1810.3/02834.html— 커널이 가변 길이 배열을 전부 걷어내고-Wvla를 전역으로 켠 자리. 배경 논의는 Jonathan Corbet. 2018. Variable-length arrays and the max() mess. LWN.net (lwn.net/Articles/749064/). (38장)Linux kernel top-level
Makefile.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Makefile— 커널이 오늘도-fno-strict-aliasing으로 빌드된다는 사실의 1차 확인처. (13·17장)
기계 구조와 스택
2장의 「이 밑그림이 통하는 데까지」 절이 기대고 있는 자료다.
- ISO/IEC 9899:2024 (C23) §6.5.3.4 — 재귀 호출이 허용되어야 한다는 조항. 표준 전문에
stack·heap이라는 낱말이 한 번도 나오지 않는다는 것은 널리 참조되는 작업 초안(N3220, 759쪽)을 기계로 훑어 확인했다. (2장) - Microchip. MPLAB XC8 C Compiler User’s Guide for PIC MCU (DS50002737). — 컴파일된 스택(정적 배치)과 재진입하지 않는 함수, 그리고 재귀 시 스택 사용량을 안내할 수 없다는 서술. (2장)
- Microchip. 8-bit PIC MCU 계열 자료 — 하드웨어 스택의 깊이(중급 8단, 개선 중급 16단)와 그것이 복귀 주소만 담는다는 사실. (2장)
기수와 3진 컴퓨터
4장의 「기수의 경제성」과 Setun 서술이 기대고 있는 자료다.
- Development of ternary computers at Moscow State University. Russian Virtual Computer Museum.
computer-museum.ru/english/setun.htm— Setun 의 개발 경위·생산 대수(50대)·트라이트 구성·생산 중단 사정에 대한 1차 기록. (4장) - Donald E. Knuth. 1997. The Art of Computer Programming, Volume 2: Seminumerical Algorithms (3rd ed.). Addison-Wesley, Reading, MA. §4.1. — 위치 기수법의 정리와 균형 3진법에 대한 서술(“아마도 모든 수 체계 중 가장 예쁜 것”). (4장)
- Science Advances 의 탄소 나노튜브 3진 논리 연구(2024).
science.org/doi/10.1126/sciadv.adt1909— 세 상태를 안정적으로 오가는 소자. ★ 논문 수준의 성과이고 제품이 아니라는 점을 본문에 명시했다. (4장)
이 책이 개념을 빌린 책들
아래는 이 책의 특정 대목이 착안점을 얻은 문헌이다. 본문에서 해당 자리에 각주로 다시 밝혔다. 문장·표·예시를 옮겨 오지는 않았으며, 서술과 측정값은 모두 이 책의 것이다.
Peter van der Linden. 1994. Expert C Programming: Deep C Secrets. Prentice Hall, Englewood Cliffs, NJ. ISBN 0-13-177429-8.
- 한국어판: 페터르 판데르린던. 2022. 컴파일러 개발자가 들려주는 C 이야기 (정기훈 옮김). 인사이트, 서울. ISBN 978-89-6626-342-4. — 이 책은 번역서를 기준으로 읽었다. 제목이 원서와 사뭇 다르니 찾을 때 주의할 것.
- 60장 — 선언을 좌우로 번갈아 읽는 방식을 「우경식」(boustrophedon)이라 부른 것, 그 절차를 우선순위 규칙으로 압축한 것(특히
const·volatile이 붙는 자리를 가르는 항), 그리고typedef사용에 관한 세 어림규칙. - 40장 — 「배열은 포인터다」라는 오해가 학습 경로 때문에 굳는다는 진단, 배열과 포인터를 축별로 대조하는 착안, 매개변수 변환이 한 겹만 일어난다는 정리, 그리고 임의 크기 다차원 배열을 넘길 수 없다는 한계의 서술 방식.
- 54장 — 링크의 세 단계를 이름으로 가른 것과, 가로채기(interpositioning)를 C 프로그래머의 문제로 제시한 것.
- 이 책의 판정: 1994년 책이라 C99 이후의 변화가 반영되어 있지 않다. 그래서 위의 각 자리에서 오늘의 표준과 실측으로 갱신했고, 어긋난 대목은 본문에서 그렇다고 밝혔다.
링크·적재·ABI
54장의 링크 서술이 기대고 있는 자료다.
- John R. Levine. 1999. Linkers and Loaders. Morgan Kaufmann, San Francisco, CA. ISBN 1-55860-496-0. — 링크 편집·적재·런타임 링크의 표준적 서술.
- Ulrich Drepper. 2011. How To Write Shared Libraries. (기술 문서, 개정판) — GOT·PLT·심볼 조회 순서·게으른 결합을 구현자의 시각에서 정리한 글.
- System V Application Binary Interface — AMD64 Architecture Processor Supplement. — 호출 규약과 ELF 의 재배치 형식. 「ABI 가 무엇을 정하는가」의 1차 자료.
- Tool Interface Standard (TIS), Executable and Linking Format (ELF) Specification, v1.2. 1995. — 세그먼트·섹션·동적 절의 정의.
ld.so(8),ld(1),dlopen(3)매뉴얼 페이지 —LD_BIND_NOW,LD_PRELOAD,-z now,-z relro,--as-needed의 정확한 뜻.- GCC·Clang 문서의 코드 생성 옵션 절 —
-fPIC/-fpic,-shared,-static,-fno-semantic-interposition.
도구와 라이브러리
- GCC, Clang/LLVM 공식 문서 — 경고 옵션, 새니타이저, 확장(17장).
- GDB, LLDB 문서 — 디버거(17장).
- proven C 라이브러리 — 이 책 제12부의 대상. 이 책은 v26.07.23d 스냅샷을 기준으로 서술하고, 예제도 그 판으로 검증했다.
- cppreference.com — 표준 라이브러리의 실용 레퍼런스.
이 책의 검증 환경
본문에 인쇄된 모든 실행 결과는 다음 환경에서 실제로 얻은 것이다.
- 컴파일:
-std=c23 -Wall -Wextra -Werror - 기준 컴파일러: GCC 14 (x86-64 리눅스)
- 교차 검증: Clang 22
- 디버거 세션 캡처: GDB 17.2
- 조판: Typst 0.15.1