콘텐츠로 이동

Windows 코드 (Windows Code)

Windows 프로그래머는 주로 Windows 헤더 및 기타 Microsoft 코드의 규칙에서 파생된 고유한 코딩 규칙 세트를 개발했습니다. 우리는 누구나 코드를 쉽게 이해할 수 있도록 모든 플랫폼에서 C++를 작성하는 모든 사람을 위한 단일 지침 세트를 제공합니다.

널리 사용되는 Windows 스타일에 익숙하다면 잊어버릴 수 있는 몇 가지 지침을 다시 한 번 반복해 볼 가치가 있습니다.

  • 헝가리어 표기법을 사용하지 마세요(예: 정수 이름 지정 iNum ). 소스 파일의 .cc 확장자를 포함하여 Google 명명 규칙을 사용하세요.
  • Windows는 DWORD , HANDLE 등과 같은 기본 유형에 대한 자체 동의어를 많이 정의합니다. Windows API 함수를 호출할 때 이러한 유형을 사용하는 것은 완벽하게 허용되고 권장됩니다. 그렇더라도 기본 C++ 유형에 최대한 가깝게 유지하세요. 예를 들어 LPCTSTR 대신 const TCHAR*를 사용하세요.
  • Microsoft Visual C++로 컴파일하는 경우 컴파일러를 경고 수준 3 이상으로 설정하고 모든 경고를 오류로 처리하십시오.
  • #pragma once를 사용하지 마세요. 대신 표준 Google 포함 가드를 사용하세요. 포함 가드의 경로는 프로젝트 트리의 상단을 기준으로 해야 합니다.
  • 실제로 꼭 필요한 경우가 아니면 #pragma 및 __declspec 과 같은 비표준 확장을 사용하지 마세요. __declspec(dllimport) 및 __declspec(dllexport) 사용이 허용됩니다. 그러나 누군가가 코드를 공유하는 경우 확장 기능을 쉽게 비활성화할 수 있도록 DLLIMPORT 및 DLLEXPORT와 같은 매크로를 통해 사용해야 합니다.

그러나 Windows에서는 때때로 위반해야 하는 몇 가지 규칙이 있습니다.

  • 일반적으로 우리는 다중 구현 상속의 사용을 강력히 권장하지 않습니다. 그러나 COM 및 일부 ATL/WTL 클래스를 사용할 때는 필요합니다. 다중 구현 상속을 사용하여 COM 또는 ATL/WTL 클래스와 인터페이스를 구현할 수 있습니다.
  • 자신의 코드에서 예외를 사용해서는 안 되지만 Visual C++와 함께 제공되는 것을 포함하여 ATL 및 일부 STL에서 광범위하게 사용됩니다. ATL을 사용할 때 예외를 비활성화하려면 _ATL_NO_EXCEPTIONS를 정의해야 합니다. STL에서도 예외를 비활성화할 수 있는지 조사해야 합니다. 그렇지 않은 경우 컴파일러에서 예외를 켜도 괜찮습니다. (이것은 STL을 컴파일하기 위한 것일 뿐입니다. 여전히 예외 처리 코드를 직접 작성해서는 안 됩니다.)
  • 미리 컴파일된 헤더를 사용하는 일반적인 방법은 각 소스 파일의 상단에 헤더 파일을 포함하는 것입니다. 일반적으로 StdAfx.h 또는 precompile.h 와 같은 이름을 사용합니다. 코드를 다른 프로젝트와 더 쉽게 공유하려면 이 파일을 명시적으로 포함하지 말고( precompile.cc 제외) /FI 컴파일러 옵션을 사용하여 파일을 자동으로 포함하세요.
  • 일반적으로 이름이 resource.h이고 매크로만 포함하는 리소스 헤더는 이러한 스타일 지침을 따를 필요가 없습니다.

이해하기 쉽게 설명하기

핵심: 모든 플랫폼에 단일 지침 — Windows 관습 일부는 버린다

이 가이드는 모든 플랫폼의 C++ 작성자를 위한 단일 지침입니다. 널리 쓰이는 Windows 스타일에 익숙하다면 잊기 쉬운 점들:

  • 헝가리안 표기법(iNum)을 쓰지 말고 Google 명명 규칙을. 소스 확장자는 .cc.
  • DWORD, HANDLE 등 Windows 타입을 Windows API 호출에 쓰는 것은 권장되지만, 가능하면 기본 C++ 타입에 가깝게(LPCTSTR 대신 const TCHAR*).
  • MSVC면 경고 수준 3 이상 + 모든 경고를 오류로.
  • #pragma once 대신 표준 Google 포함 가드.
  • #pragma·__declspec 같은 비표준 확장은 꼭 필요할 때만(__declspec(dllimport/dllexport)DLLIMPORT/DLLEXPORT 매크로를 통해).

Windows에서는 어쩔 수 없이 어기는 규칙

  • 다중 구현 상속: 보통 강력히 비권장하지만 COM·ATL/WTL에는 필요.
  • 예외: 직접 쓰진 않더라도 ATL·일부 STL이 광범위하게 사용. ATL은 _ATL_NO_EXCEPTIONS로 끄고, STL도 가능하면 끄되 안 되면 컴파일러에서 켜도 됨(STL 컴파일용일 뿐, 직접 예외 코드를 쓰진 말 것).
  • 미리 컴파일된 헤더(StdAfx.h): 명시적 포함 대신 /FI 옵션으로 자동 포함.
  • 매크로만 든 리소스 헤더(resource.h)는 이 지침을 따를 필요 없음.