1장. 전처리기
__PRE30-C. 유니버설 문자 이름을 여러 문자열에 붙여서 만들지 마라
__PRE31-C. 불안전한 매크로에 매개 변수로 인한 부수 효과를 피하라
__PRE32-C. 함수형 매크로 호출에 전처리 지시자를 사용하지 마라
2장. 선언과 초기화
__DCL30-C. 객체를 선언할 때 적절한 지속 공간을 지정하라
__DCL31-C. 식별자를 사용하기 전에 먼저 선언하라
__DCL36-C. 연결(링크 분류에서 충돌하는 식별자를 선언하지 마라
__DCL37-C. 예약어를 식별자로 선언하거나 정의하지 마라
__DCL38-C. 유연한 배열의 멤버를 선언할 때 정확한 문법을 사용하라
__DCL39-C. 구조체 패딩에서 정보의 누출을 피하라
__DCL40-C. 동일한 함수나 객체에 호환되지 않는 선언을 생성하지 마라
__DCL41-C. switch구문에 첫 번째 case 절 앞에 변수를 선언하지 마라
3장. 표현식
__EXP30-C. 부수 효과로 인한 평가 순서에 의존하지 마라
__EXP32-C. volatile이 아닌 참조자로 volatile 객체에 접근하지 마라
__EXP33-C. 초기화되지 않은 메모리를 읽지 마라
__EXP34-C. 널 포인터를 역참조하지 마라
__EXP35-C. 임시 존속 기간을 가진 객체를 수정하지 마라
__EXP36-C. 포인터를 더 엄격하게 할당된 포인터 타입으로 변환하지 마라
__EXP37-C. 인자의 정확한 개수와 타입으로 함수를 호출하라
__EXP39-C. 호환되지 않는 타입의 포인터 변수에 접근하지 마라
__EXP40-C. 상수 객체를 수정하지 마라
__EXP42-C. 패딩 데이터를 비교하지 마라
__EXP43-C. restrict로 한정된 포인터를 사용할 때 정의되지 않은 동작을 피하라
__EXP44-C. sizeof, _Alignof, _Generic에서 피연산자의 부수 효과에 의존하지 마라
__EXP45-C. 선택문에서 할당을 하지 마라
4장. 정수
◈ 이 책에서 다루는 내용 ◈
◆ 전처리기
◆ 선언과 초기화
◆ 표현식
◆ 정수
◆ 부동소수점
◆ 배열
◆ 문자와 문자열
◆ 메모리 관리
◆ 입력/출력
◆ 환경변수
◆ 시그널
◆ 에러 처리
◆ 동시성 제어
◆ 기타 이슈
◈ 이 책의 대상 독자 ◈
C 언어 개발자를 우선 대상으로 하며 맞춤형 소프트웨어(bespoke software를 위한 이해관계자의 요구 사항을 정의하는 데 사용한다. 신뢰성과 견고성이 있고 보안 공격에 잘 견디는 고성능 시스템 개발에 관심 있는 개발자라면 더욱 흥미롭게 읽을 것이다.
C++ 개발자를 대상으로 하지는 않지만 C 언어 프로그램에서 발생하는 대다수의 문제가 C++ 프로그램에서도 공통적으로 나타나기 때문에 C++ 개발자도 참고하기 좋다.
◈ 이 책의 구성 ◈
총 14장으로 구성됐으며 특정 주제에 대한 표준과 규칙, 세 파트로 구성된 부록과 참고 문헌, 색인을 포함한다. 부록의 첫 부분은 이 책에서 사용된 용어 사전이다. 두 번째 부분은 Annex J, J.2 [ISO/IEC 9899:2011] 표준 C에 정의되지 않은 가이드라인을 쉽게 참조하도록 번호를 붙여 주제별로 분류했다. 세 번째 부분은 Annex J, J.1 [ISO/IEC 9899:2011] 표준 C에 정의되지 않은 가이드라인을 포함했으며 필요 시 표준 규칙으로 쉽게 참조할 수 있다.
이 책은 C11을 사용해 개발됐으나 C99를 포함, C 언어의 하위 버전과 호환해서 사용할 수 있다. 표준 규칙을 적용하는 데 영향을 미칠 수 있는 표준 C 버전 간의 차이를 주의해야 한다.
◈ 초판에 쏟아진 찬사 ◈
"나는 CERT 안전한 코딩 이니셔티브(CERT Secure Coding Initiative의 열렬한 지지자다. 프로그래머는 정확성, 명확성, 유지보수성, 성능, 심지어 안정성에 관해서도 여러 방법으로 조언을 구할 수 있다. 하지만 특정 언어의 특징이 보안에 미치는 영향은 다루고 있지 않다. 이 책이야말로