기술 노트/Google Code Style Guide

Google C++ Style Guide(2024) - 12장 규칙 예외(Exceptions to the Rules)

anothel 2024. 11. 15. 19:03

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

https://google.github.io/styleguide/cppguide.html

728x90