12장 규칙 예외(Exceptions to the Rules)
위에서 설명한 코딩 규칙들은 반드시 따라야 하는 필수 사항이다. 그러나 모든 좋은 규칙에 예외가 있듯이, 일부 경우에는 이러한 규칙에서 벗어날 수 있는 예외 상황이 있다. 여기서는 이러한 예외 사항에 대해 다룬다.
12.1 기존의 스타일을 따르지 않는 코드 (Existing Non-conformant Code)
이 스타일 가이드에 맞지 않는 기존 코드를 다룰 때는 규칙에서 벗어날 수 있다.
가이드와 다른 방식으로 작성된 코드를 수정할 경우, 해당 코드의 로컬 규칙에 일관성을 맞추기 위해 이 가이드의 규칙에서 다소 벗어날 수 있다. 어떻게 해야 할지 확신이 서지 않을 때는 원 작성자나 현재 코드의 책임자에게 문의하는 것이 좋다. 일관성은 전체 코드뿐만 아니라 로컬 수준의 일관성도 포함한다는 점을 기억해야 한다.
12.2 Windows 코드 스타일 (Windows Code)
Windows 프로그래머들은 주로 Windows 헤더 및 Microsoft 코드에서 비롯된 자체적인 코딩 규칙을 개발해왔다. 그러나 구글 C++ 스타일 가이드에서는 모든 플랫폼에서 이해하기 쉽게 일관된 규칙을 사용하도록 한다. Windows 스타일에 익숙하다면 다음 몇 가지 사항을 특히 유념해야 한다.
주요 가이드라인 요약
- 헝가리안 표기법 사용 금지
- 변수에 타입을 나타내는 접두사(예: 정수형 변수 iNum)를 사용하지 않는다.
- Google의 네이밍 규칙을 사용하고, 소스 파일에는 .cc 확장자를 사용한다.
- Windows 기본 타입 사용
- Windows API 함수 호출 시 DWORD, HANDLE 등의 Windows 기본 타입을 사용하는 것은 허용된다.
- 기본 C++ 타입과의 일관성을 유지하기 위해 가능한 한 const TCHAR *처럼 표준에 가까운 형태를 사용하는 것이 좋다.
- 컴파일러 설정
- Microsoft Visual C++에서 컴파일할 때는 경고 수준을 3 이상으로 설정하고, 모든 경고를 오류로 처리하도록 한다.
- include guards
- #pragma once를 사용하지 않고, Google 표준 include guards를 사용한다.
- include guards의 경로는 프로젝트 최상위 경로에 상대적이어야 한다.
- 비표준 확장 사용 금지
- #pragma 및 __declspec 같은 비표준 확장은 필요하지 않다면 사용하지 않는다.
- __declspec(dllimport)와 __declspec(dllexport)는 매크로(DLLIMPORT, DLLEXPORT)를 통해 사용해야, 코드 공유 시 확장을 비활성화할 수 있다.
Windows에서 예외적으로 허용되는 사항
- 다중 구현 상속
- COM 및 ATL/WTL 클래스와 인터페이스 구현 시에는 다중 구현 상속이 필요할 수 있다. 이 경우에만 다중 구현 상속을 사용할 수 있다.
- 예외 사용
- 자체 코드에서는 예외를 사용하지 않지만, ATL 및 일부 STL(특히 Visual C++ STL)은 예외를 사용한다.
- ATL 사용 시 _ATL_NO_EXCEPTIONS를 정의하여 예외를 비활성화하고, STL에서도 예외를 비활성화할 수 있는지 확인한다.
- 예외를 비활성화할 수 없는 경우, 컴파일러에서 예외를 활성화하여 STL이 컴파일되도록 할 수 있다. 단, 예외 처리 코드는 직접 작성하지 않는다.
- 미리 컴파일된 헤더
- 일반적으로 각 소스 파일 상단에 StdAfx.h나 precompile.h 같은 미리 컴파일된 헤더를 포함한다.
- 다른 프로젝트와의 공유를 용이하게 하기 위해, 이 파일을 명시적으로 포함하지 않고 /FI 컴파일러 옵션을 사용하여 자동으로 포함되도록 한다.
- 리소스 헤더
- resource.h처럼 매크로만 포함하는 리소스 헤더는 이 스타일 가이드에 따르지 않아도 된다.
참조URL
728x90
'기술 노트 > Google Code Style Guide' 카테고리의 다른 글
Google C++ Style Guide(2024) - 11장 코드 형식 (Formatting) (2) | 2024.11.14 |
---|---|
Google C++ Style Guide(2024) - 10장 주석(Comments) (0) | 2024.11.13 |
Google C++ Style Guide(2024) - 9장 명명 규칙(Naming) (1) | 2024.11.12 |
Google C++ Style Guide(2024) - 8장 포괄적 언어(Inclusive Language) (0) | 2024.11.11 |
Google C++ Style Guide(2024) - 7장 기타 C++ 기능(Other C++ Features) (6) | 2024.11.10 |