목차
시작하기 전에 = 15
Part Ⅰ 코드 설계 기법
Chapter 1 적합한 코드 작성
이 책은 누구에게 필요한가? = 20
교수법 = 21
어디서부터 읽어야 하는가? = 21
주의! 모든 C/C++ 컴파일러는 같지 않다 = 22
언어 독립적 설계 툴 101 = 22
스테이지 설정 = 23
모델! = 24
구조 차트, 슈도(Pseudo) 코드, IPO 다이어그램 = 24
바람직한 프로그램 설계의 다섯 가지 요소 = 29
법칙은 깨어지게 되어 있다 = 29
Ansel Adams 또는 피카소 = 30
주석란 = 30
identifiers, IDENTIFIERS, Identifiers = 31
간격(Spacing)과 들여쓰기(Indentation) = 32
데이터 타입 = 39
헝가리식 표기법(Hungarian Notation) = 42
MFC, 핸들, 컨트롤, 구조의 명명법 = 43
일반적인 접두사의 명명법 = 43
변수 명명법 = 44
어플리케이션 기호의 명명법 = 44
마이크로소프트 MFC 매크로의 명명법 = 44
라이브러리 식별자 명명법 = 44
정적 라이브러리 버전의 명명법 = 45
DLL 명명법 = 46
windows.h 명명법 = 46
연산자 우선 순위 = 47
결론 = 48
Chapter 2 컴파일러 활용
여러분의 코딩 책임감과 컴파일러 활용 = 52
마이크로소프트 비주얼 C++ 최적 활용 = 54
명령 재배열 = 54
함수 레벨 링크(Function-Level Linking) = 55
스트링 풀링 = 55
register 키워드 사용 = 55
상수와 복사본의 전달 = 57
Dead Code와 Dead Store의 제거 = 57
장황한 부 표현(sub expression)의 제거 = 58
루프의 최적화 = 59
Strength 축소 = 59
인라인 키워드의 사용 = 59
프레임 포인터 생략 = 60
스택 검사 비활성화 = 61
스택 오버레이 = 62
함수 호출에서 별명 사용(aliasing) 허용 = 62
전역 최적화 = 63
내연적 함수 인라인(Intrinsic Functions Inline) 생성 = 64
math.h 최적화 = 64
마이크로소프트 C++ 최적화 스위치 = 64
컴파일러 옵션 설정을 위한 마이크로소프트 비주얼 스튜디오 사용 = 66
Project Settings 대화 상자에서 General Category = 67
Project Settings 대화 상자에서 Code Generation = 68
Project Settings 대화 상자에서 Customize Category = 71
Project Settings 대화 상자에서 Optimizations Category = 72
빌드 추전 = 73
결론 = 75
Chapter 3 논리 에러 vs. 구문 에러
좋은 디버그 전략 = 79
에러의 네 가지 분류 = 80
구문 에러 = 80
링커 에러 = 81
런타임 에러 = 82
논리 에러 = 84
에러 메시지 확인 = 85
예방적 차원에서 프로그램의 작성 = 87
설계상 검사! 이것이 무엇일까? = 87
예외 처리를 위한 디자인 = 88
"그들이 일할 수 있도록 도와라" = 89
마이크로소프트 비주얼 C++ 도움말 = 90
결론 = 92
Chapter 4 디버거의 기초
디버거가 사용 가능한지 학인 = 94
디버거의 시작 = 95
Step Into와 Step Over의 차이점 = 97
Go = 98
Run to Cursor = 98
디버거 툴바 아이콘들의 이해 = 98
Restart = 99
Stop Debugging = 99
Break Execution = 99
Apply Code Changes, Edit, 그리고 Continue = 99
Show Next Statement = 101
Step Into = 101
Step Over = 101
Step Out = 101
Run to Cursor = 101
QuickWatch = 102
Watch = 102
Variables = 102
Registers = 102
Memory = 102
Call Stack = 102
Disassembly = 102
디버거 툴바 메뉴 동치 = 103
추가적인 Debug 메뉴 옵션들 = 103
Step Into Specific Function = 103
Exceptions = 103
Threads = 104
Modules = 104
Local Menu 디버거 옵션 = 104
List Members = 104
Type Info = 104
Parameter Information = 105
Complete Word = 105
Go To Definition/Reference = 106
Go To Disassembly = 106
Insert/Remove Breakpoint = 106
Debugger Window = 106
Trace Window = 107
Watch Window = 107
View 메뉴, Debugger Window = 108
WorkSpace = 108
Output = 108
다른 데이터 타입으로서의 Watch 변수들 = 108
Just-in-Time 디버깅 = 110
Option 윈도우의 Debug 탭 = 111
Hexadecimal Display = 111
Source Annotation = 111
Code Bytes = 111
Symbols = 111
Parameter Values = 112
Parameter Types = 112
Return Value = 112
Load COFF & Exports = 112
Address = 112
Format = 112
Re-evaluate Expression = 112
Show Data Bytes = 112
Fixed Width = 112
Display Unicode Strings = 113
View Floating Point Registers = 113
Just-in-time Debugging = 113
OLE RPC Debugging = 113
Debug Commands Invoke Edit and Continue = 113
Keyboard Map = 113
디버거 키보드 단축키 = 114
결론 = 115
Chapter 5 디버그 vs 리릴즈 지원
기본값 디버그 빌드 vs 릴리즈 빌드 설정 = 118
디버그 빌드의 프로젝트 설정 변경 = 118
디버그 옵션 변경 = 119
생성된 디버그 정보의 포맷 변경 = 119
Mapfile 생성 = 120
디버그 Input과 Output을 리다이렉트하기 = 120
.pdb 파일이란? = 121
.dbg 파일이란? = 122
최적화된 코드의 디버깅 = 123
디버거를 사용할 수 있게 하는 또 다른 방법 = 125
기본 버전 또는 디버그 버전을 사용하는 것에 대해 = 126
C/C++ 런타임 디버그 라이브러리 = 127
예전의 iostream.h와 신 버전의 iostream 때문에 생길 수 있는 혼동 = 128
링커 레퍼런스 = 130
디버그 빌드에서 릴리즈 버전 에러를 찾아내기 = 130
지역 변수의 자동 초기화 = 132
함수 포인터 Call Stack이 유효한지 확인 = 133
Call Stack이 유효한지 확인 = 134
Trace 매크로 = 134
VERIFY 매크로 = 135
이전의 32비트 버전의 비주얼 C++를 포팅하기 = 135
예전의 32비트 Workspace와 Project 새 버전으로 컨버전하기 = 136
이전 버전의 비주얼C++과 공존 = 136
결론 = 137
Part Ⅱ 프로시저 기반의 환경
Chapter 6 명령형 코드의 에러 위치, 분석, 수정하기
디버깅 시작하기 = 142
디버거를 시작하는 빠른 방법 = 143
변수 초기화 추적하기 = 147
Stroustrup의 C++ 코드가 아닌 여러분의 코드를 디버그하라! = 153
나의 변수는 무엇을 포함하는가? = 156
디버거 중 멈추기 = 157
특정 코드 라인으로 나아가기 = 157
빠른 속도로 breakpoint까지 실행하기 = 158
커서까지 실행하기 = 159
바로 테스트하라! = 159
진보된 디버거 트릭 = 160
새로운 값으로 실행하기 = 161
디버깅 트릭 루프 돌기 = 168
함수 호출 디버깅하기 = 171
재귀 함수와 Call Stack = 177
디스어셈블리 코드 보기 = 181
변수 더 가까이 보기 = 185
QuickWatch window 사용하기 = 185
Watch window 사용하기 = 187
결론 = 188
Chapter 7 인라인 어셈블리 언어 디버깅
간단한 어셈블리 언어 개요 = 190
데이터 유형 = 190
레지스터 = 191
어드레싱 모드 = 191
포인터 = 192
코프로세서 = 193
디버깅 = 194
뺄셈하기 = 195
256비트 정수 작업 = 200
프로그래밍 루프 = 210
코프로세서 실수 더하기 = 216
코프로세서에서 탄젠트 값 계산 = 222
결론 = 232
Chapter 8 윈도우 코드의 에러를 찾고 분석, 수정하기
두 대의 컴퓨터로 디버깅하기 = 234
원격 타겟(Remote target) 컴퓨터 준비하기 = 235
호스트 컴퓨터를 준비하기 = 237
디버깅 시작하기 = 238
간단한 윈도우 입문서 = 240
기본 윈도우 코드 = 240
특정한 디버깅 파일 = 242
이 프로그램에서 무슨 일이 생긴 것일까? = 243
디버깅 = 251
움직이는 비트맵 프로그램 = 251
마우스로 그리기 = 268
결론 = 282
Part Ⅲ 객체지향적인 환경
Chapter 9 명령형 코드의 에러를 찾고 분석, 수정하기
발전된 디버깅 툴 = 286
메모리 덤프 = 286
잘못 넘어온 매개변수의 위치를 찾기 = 287
어디서 포인터가 변경되었는지 찾기 = 290
Class View 요소 = 301
접근 권한에 따라 분류된 ClassView = 304
ClassView 기본 클래스 = 305
ClassView 레퍼런스 = 307
ClassView 파생 클래스 = 308
추가적인 Local ClassView 메뉴 = 309
ClassView 멤버 속성 = 310
ClassView에 폴더 더하기 = 310
폴더들 간에 클래스 옮기기 = 311
ClassView 숨기기 또는 보이기 = 311
argc와 argv〔〕 디버깅 = 311
결론 = 316
Chapter 10 마이크로소프트 기반 클래스 라이브러리를 이용한 윈도우 프로그래밍
왜 클래스 라이브러리를 사용하는가? = 318
진정한 기반 클래스 - CObject = 319
어플리케이션 마법사와 클래스 마법사란 무엇인가? = 322
그래프 어플리케이션 = 323
AppWizard 사용하기 = 323
ClassWizard 사용하기 = 329
AppWizard 코드 구성하기 = 331
AppWizard의 템플릿 코드 = 332
사용자 영역에서의 그래픽 개체 = 342
프로파일링 = 346
결론 = 352
Chapter 11 MFC 윈도우 코드에서 에러를 찾고 분석, 수정하기
메모리 문제 = 354
문제점을 가진 코드 = 355
에러 찾기 및 분석 = 358
프로젝트의 보수 = 368
표시 문제 = 373
문제점을 가진 코드 = 374
에러 탐색 및 분석 = 379
프로젝트 보수 = 387
결론 = 391
Part Ⅳ 표준 템플릿 라이브러리
Chapter 12 STL 코딩 연습
다중 아키텍처 = 396
C++ 길들이기 = 397
STL- 상자에서의 자료 구조? = 398
STL-첫 번째 관찰 = 399
STL과 휴렛 팩커드 = 399
고급 기술로써의 STL = 400
STL-"큰 그림" = 400
STL ANSI/ISO C++ 인정 = 401
STL의 기본적인 컴포넌트 = 401
컨테이너란 무엇인가? = 402
어댑터는 무엇인가? = 403
알고리즘이란 무엇인가? = 404
반복자란 무엇인가? = 405
다른 STL 구성 요소는 없는가? = 405
완벽한 STL 패키지 = 406
Historic C, ANSI C, C++, ANSI C++ -HELP! = 407
자료 구조 - 복습 = 408
정적 대 동적 = 408
Typed Pointers = 410
Void Pointers = 410
헝가리식 표기법 = 414
오버로딩 함수 = 415
함수 포인터 = 416
연산자 오버로딩 = 419
오버로딩된 연산자와 함수 호출 = 420
나만의 오버로딩된 연산자 작성 = 420
구조체를 넘어서 템플릿으로 = 423
키워드 template = 424
템플릿 구문 = 425
템플릿 함수 = 425
템플릿 클래스 = 426
왜 템플릿보다 STL이 더 좋은가? = 427
결론 = 428
Chapter 13 STL 코드에서 에러를 찾고 분석, 수정하기
표준 C++를 STL 구문으로 변환할 때의 문제점 = 430
컨테이너 탐색 = 430
반복자 - 더 자세하게 = 431
스트림 반복자 = 432
왜 end()를 써야 하나? = 433
리스트의 복사 = 433
리스트 안의 리스트 = 434
STL 문자열 포인터 문제 = 435
STL 포인터들의 회수 = 436
C++를 STL 코드로 변환 = 437
1단계 SingleCard 클래스의 업데이트 = 441
2단계 WarDeck 클래스 업데이트 = 444
3단계 STL 실행 에러 수정 = 449
4단계 Opponent 클래스 업데이트 = 450
5단계 STL 프로그램 동작 = 452
STL wargame.cpp = 453
결론 = 458
Part Ⅴ 특별한 디버깅 문제들
Chapter 14 DLL 디버깅
MFC 기반의 DLL 작성 = 463
Framer.h 헤더 파일 = 465
Framer.cpp 소스 코드 파일 = 466
Framer.dll의 빌딩 = 469
DLL을 사용하기 위해 주프로그램의 작성 = 470
DLLDemoView.h 헤더 파일 = 472
DLLDemoView.cpp 소스 코드 파일 = 472
자세한 고찰을 위한 준비 = 480
원격 디버깅 = 480
문제가 있는 코드 = 483
수정된 코드 = 487
결론 = 488
Chapter 15 ActiveX 컨트롤 디버깅
ActiveX 컨트롤 개발 = 490
ControlWizard의 사용 = 491
Test Container = 495
실제 Clock 컨트롤의 생성 = 497
Clock 컨트롤 디버깅 = 507
원격 타겟 컴퓨터의 준비 = 508
호스트 컴퓨터의 준비 = 509
디버깅 시작 = 510
문제점 찾기 = 512
결론 = 515
Chapter 16 COM, ATL, DHTML 디버깅
COM 객체 모델 = 518
ATL Polygon 프로젝트의 작성 = 518
템플릿 코드의 확장 = 524
컨트롤 테스트 = 537
ATL COM 컨트롤 디버깅 = 538
결론 = 542
Chapter 17 STL, MFC 코딩
STL과 MFC 프로그램 작성 = 544
복소수 = 544
Template Syntax = 546
기본 프로그램 코드 = 551
디버깅 = 558
결론 = 566
찾아보기 = 567