CONTENTS
목차
읽음 표시는 직접 선택하며 자동 완료되지 않습니다.
- 01C 컴파일·링크·실행 - 전처리 오브젝트 파일과 링크 오류 읽기 (C 기초 1장)
소스 파일이 실행 파일이 되는 전처리·컴파일·링크 단계를 나눠 실행하고, 선언 누락과 정의 누락 오류를 구분하며 프로그램의 메모리 영역을 그린다.
- 02C 자료형과 크기 - sizeof 바이트 순서 부호와 오버플로 (C 기초 2장)
sizeof와 limits.h로 자료형 크기를 재고, 정수의 바이트를 직접 찍어 엔디언을 확인하며, 부호 없는 순환과 부호 있는 오버플로를 UBSan으로 구분한다.
- 03C 연산자와 형 변환 함정 - 정수 나눗셈 승격 부호 비교 우선순위 (C 기초 3장)
정수 나눗셈, 정수 승격과 잘림, 부호가 다른 비교, 비트 연산 우선순위, 부동소수 절삭이 결과를 조용히 틀리게 만드는 순간을 경고와 실행 결과로 본다.
- 04C 제어문 - if switch 반복문과 컴파일러가 잡아 주는 실수 (C 기초 4장)
if 사슬과 switch, 세 가지 반복문과 break·continue를 추적 표로 익히고, 대입·비교 혼동과 빈 본문, 빠진 break를 컴파일러 경고로 잡는다.
- 05C 함수와 호출 스택 - 값 전달 스택 프레임 static 지역 변수 (C 기초 5장)
인자가 복사되는 값 전달, 재귀 호출마다 쌓이는 스택 프레임을 주소 차이로 측정하고, static 지역 변수의 수명과 지역 변수 주소 반환의 위험을 본다.
- 06C 배열과 문자열 - 연속 메모리 널 종료와 안전한 복사 (C 기초 6장)
배열의 연속 배치와 함수로 넘길 때 사라지는 크기, 널 종료 문자열과 UTF-8 바이트, snprintf 잘림 검사와 범위 밖 접근의 UBSan 보고를 확인한다.
- 07C 포인터 기초 - 주소와 역참조 출력 매개변수 NULL 검사 (C 기초 7장)
주소를 담는 변수인 포인터를 그림으로 이해하고, swap과 출력 매개변수 패턴을 만들며, NULL과 초기화하지 않은 포인터가 일으키는 실패를 직접 본다.
- 08C 포인터와 배열 - 포인터 연산 끝 포인터 2차원 배열 const (C 기초 8장)
포인터 연산이 자료형 크기 단위로 움직이는 것을 재고, 인덱스와 포인터 식의 관계, 끝 포인터, 2차원 배열 배치, const 포인터의 두 가지 뜻을 익힌다.
- 09C 동적 메모리 - malloc realloc free 와 누수 이중 해제 찾기 (C 기초 9장)
힙에서 빌리고 돌려주는 메모리로 늘어나는 배열을 만들고, 누수·해제 후 사용·이중 해제를 실행 결과와 clang 정적 분석기로 찾는다.
- 10C 구조체와 메모리 배치 - offsetof 패딩 정렬과 필드 순서 (C 기초 10장)
구조체의 필드 오프셋과 패딩을 offsetof와 -Wpadded로 측정하고, 필드 순서로 크기를 줄이며, 구조체 복사와 포인터 전달의 차이를 본다.
- 11C 파일 입출력 - fopen fgets sscanf 오류 처리와 바이너리 저장 (C 기초 11장)
텍스트 CSV를 한 줄씩 안전하게 읽어 잘못된 줄을 건너뛰고, 구조체를 바이너리로 저장한 뒤 od로 바이트를 확인하며 엔디언·패딩 이식성 문제를 짚는다.
- 12C 디버깅 도구 - 컴파일러 경고 UBSan ASan 정적 분석 lldb gdb (C 기초 12장)
버그 세 개가 숨은 함수를 컴파일러 경고, lldb 조건부 중단점, UBSan으로 차례로 잡고, 정적 분석기와 AddressSanitizer의 역할과 한계를 정리한다.
이 책은 Devin.KR 원고를 참조합니다. 원고의 원래 주소와 저작자 표기를 유지하며 같은 글을 다시 등록하지 않습니다. 수정된 원고는 읽기 화면에서 재검수 상태를 확인할 수 있습니다.