목차
저자서문 ... 4
역자서문 ... 6
이 책의 구성 ... 8
CHAPTER 1 자, 슬슬 나만의 코드를 작성해보자!
   1-1 C 프로그램의 확장자란? ... 20
   1-2 main()함수란? ... 23
   1-3 EOF가 뭐지? : 파괴된 함수 블록 ... 27
   1-4 망가진 케익은 먹지 않는다! : 들여쓰기 ... 30
   1-5 공사 중이라면 표지판을 세우자 : 주석문 ... 33
   1-6 흔히 있는 주석문 착각 : 주석문 중첩 ... 36
   1-7 끝맺음이 없는 문장을 만들지 말자 ... 39
   1-8 함수를 사용한다면 라이브러리 헤더 파일을 인클루드하자 ... 42
   1-9 include의 〈 〉과 " "는 어떻게 다른 거야? ... 45
   1-10 올바른 명령행 인수를 얻읍시다 ... 48
   1-11 올바른 방법으로 프로그램을 종료하자 ... 52
   1-12 printf() 함수를 잘 다루자 ... 56
CHAPTER 2 자료형, 키워드, 변수 다루기에 익숙해지자
   2-1 자료형과 키워드는 모두 소문자로 쓰자 ... 66
   2-2 변수명의 규칙은 무엇인가? ... 68
   2-3 변수는 반드시 초기화하자 ... 74
   2-4 변수의 선언이나 초기화문을 정리하자 ... 78
   2-5 C 프로그램에서 수치 값을 기술하려면 어떻게 해야 되는가? ... 82
   2-6 char형 배열을 올바르게 초기화하려면 ... 87
   2-7 char형 배열을 긴 문자열로 초기화하려면 ... 90
   2-8 변수가 숨어버렸다! ... 93
   2-9 왜 변수를 사용할 수 없는가? ... 96
   2-10 문자와 문자열을 올바르게 구분하여 사용하자 ... 99
CHAPTER 3 연산자와 조건 처리에 익숙해지자
   3-1 조건이 평가되는 순서를 생각하라 ... 106
   3-2 프로그램이 왜 이상해졌을까? ... 112
   3-3 왜 변수를 증가시킬 수 없는가? ... 117
   3-4 좌변 값이 될 수 없는 식이 있는가? ... 120
   3-5 쓸모 있는 if문을 작성하자 ... 123
   3-6 불명확한 if와 else의 대응을 조심하자 ... 126
   3-7 이상하다? if-else문이 작동하지 않는 이상한 조건 ... 134
   3-8 왜 항상 동일한 값이 될까? ... 139
   3-9 장황하게 표현된 if-else문(1) : switch문을 사용하자 ... 142
   3-10 장황하게 표현된 if-else문(2) : 조건 연산자를 사용하자 ... 145
   3-11 switch/case의 포인트(1) : 정수 상수 ... 151
   3-12 switch/case의 포인트(2) : break문 ... 156
CHAPTER 4 루프 제어에 익숙해지자
   4-1 프로그램에 상수를 넣어두지 말자 : define ... 166
   4-2 왜 1부터 시작하면 안 되는 걸까? ... 170
   4-3 루프에서는 절대로 방어한다 : 경계 초월 ... 174
   4-4 어떻게 하지? 루프가 멈추지 않네 : 종료 조건이 없다 ... 177
   4-5 루프가 이상하다! 제어 변수 초기화를 잊었다 ... 180
   4-6 무한루프를 활용하자 : 루프 탈출 ... 184
   4-7 도움이 안 되는 지연 루틴 ... 190
   4-8 while 루프에서 자주 저지르는 실수 : 제어 변수 갱신 까먹기 ... 197
   4-9 쉽게 빠져나오지 못하는 루프 : 중첩 루프 ... 202
   4-10 goto문의 사용은 이제 그만 : 구조적 프로그래밍 ... 206
CHAPTER 5 배열, 문자, 문자열 다루기에 익숙해지자(포이터 : 첫 번째)
   5-1 문자열의 길이를 구하는 포인트 : 널 문자 ... 214
   5-2 포인터 조작의 포인트(1) : 포인터의 초기화 ... 218
   5-3 포인터 조작의 포인트(2) : 포인터가 참조하는 곳의 초기화 ... 222
   5-4 문자열을 연결하는 포인트(1) : 널 문자 ... 227
   5-5 문자열을 연결하는 포인트(2) : 충분한 사이즈 ... 230
   5-6 문자열을 연결하는 포인트(3) : strncat()함수 ... 233
   5-7 문자열을 복사하는 포인트(1) : 널 문자 ... 236
   5-8 문자열을 복사하는 포인트(2) : strncpy()함수 ... 239
   5-9 문자열을 비교하는 포인트 널 : 문자 ... 243
   5-10 이상하다. 입출력을 재지정할 수 없다 ... 246
   5-11 다차원 배열에서 자주 하는 실수 : 불명확한 초기화 ... 251
   5-12 포인터 조작의 포인트(3) : 값과 주소의 차이 ... 255
   5-13 포인터 조작의 포인트(4) : 문자열 정렬 ... 258
CHAPTER 6 정수, 실수, 비트 다루기에 익숙해지자(포인터 : 두 번째)
   6-1 printf()함수가 이상하다! : 연산자의 우측 결합 ... 268
   6-2 포인터 조작의 포인트(5) : 주소 다루기 ... 272
   6-3 다른 자료형 간의 대입을 조심하자 : 데이터 손실 ... 280
   6-4 명시적 형변환을 조심하자 : 경고가 없어진다 ... 285
   6-5 가감승제 연산자의 우선순위에 주의하자 ... 288
   6-6 지수 표기법을 사용하려면? ... 292
   6-7 비트 연산자를 사용했더니 정수의 부호가 바뀌었다 ... 298
   6-8 비트 다루기에 익숙해지자 ... 303
   6-9 C의 정수형과 컴퓨터에서 숫자를 다루는 구조를 이해하자 ... 309
   6-10 16비트 환경과 32비트 환경 모두의 int형을 지원하고 싶다 : 이식성 문제 ... 318
CHAPTER 7 함수 다루기에 익숙해지자(포인터 : 세 번째)
   7-1 함수 정의의 포인트(1) : 변수의 수명을 이해하자 ... 330
   7-2 함수 정의의 포인트(2) : 자료형을 지정하자 ... 334
   7-3 함수 정의의 포인트(3) : 함수 원형을 선언하자 ... 338
   7-4 함수 정의의 포인트(4) : 외부 선언을 사용하자 ... 343
   7-5 함수 정의의 포인트(5) : 인수와 반환 값을 값에 의한 전달로 처리하기 ... 347
   7-6 함수 정의의 포인트(6) : 인수와 반환 값의 참조(포인터) 전달 ... 351
   7-7 포인터 조작의 포인트(6) : 실체가 없는 반환 값 포인터 ... 356
   7-8 이상하다! 재귀 함수를 올바르게 종료할 수 없다 : 재귀 함수의 종료 ... 361
   7-9 거듭제곱을 구하는 함수의 계산이 이상하다 : 재귀 함수의 초기화 ... 366
   7-10 함수 정의의 포인트(7) : 공통 루틴 다루기 ... 371
CHAPTER 8 구조체 다루기에 익숙해지자(포인터 : 네 번째)
   8-1 구조체를 능숙하게 사용하자 ... 382
   8-2 구조체 변수를 잘 선언하자 ... 387
   8-3 구조체명은 자료형으로 사용할 수 없는가? ... 391
   8-4 포인터 조작의 포인트(7) : char형 배열과 char *형 변수 ... 396
   8-5 포인터 조작의 포인트(8) : 왜 갑자기 화살표 연산자를 사용할 수 없지? ... 403
   8-6 구조체의 비트 필드를 활용하자 ... 409
   8-7 불완전한 비트 테스터 : 열거형의 이름 붙은 상수를 사용한다 ... 415
CHAPTER 9 동적 메모리 할당에 익숙해지자(포인터 : 다섯 번째)
   9-1 포인터 조작의 포인트(9) : NULL 포인터 다루기(1) ... 426
   9-2 포인터 조작의 포인트(10) : void *형 포인터의 형변환 ... 431
   9-3 포인터 조작의 포인트(11) : 포인터의 보폭 차이를 이해한다 ... 435
   9-4 포인터 조작의 포인트(12) : void *형의 포인터의 능숙한 사용법 ... 440
   9-5 포인터 조작의 포인트(13) : 포인터가 참조하는 곳의 초기화 ... 447
   9-6 메모리 영역을 복사하려면? ... 452
   9-7 포인터 조작의 포인트(14) : NULL 포인터 다루기(2) ... 457
   9-8 포인터 조작의 포인트(15) : 함수 포인터 ... 469
   9-9 동적 연결 리스트를 만들려면? ... 474
CHAPTER 10 파일 다루기에 익숙해지자(포인터 : 여섯 번째)
   10-1 포인터 조작의 포인트(16) : NULL 포인터 다루기(3) ... 492
   10-2 환경에 의존적인 함수는 사용하지 말자 : 파일 크기 ... 500
   10-3 fgets() 함수의 동작이 이상하다 ... 508
   10-4 왜 복사한 파일의 크기가 다르지? : 크기 지정 ... 520
   10-5 이상하다! 맨 마지막 줄이 잘 출력되지 않는다 : 자주 있는 문제 ... 527
   10-6 포인터 조작의 포인트(17) : 포인터를 파일로 저장해서는 안 된다 ... 537
   10-7 가변 길이 레코드를 임의접근 하려면? ... 546
찾아보기 ... 563
닫기