C++에서 windows.h의 효율성 향상

Syed Hassan Sabeeh Kazmi 2023년10월12일
  1. C++ 프로그램에서 NOMINMAX를 정의하여 Windows.h의 효율성 향상
  2. WIN32_LEAN_AND_MEAN을 사용하여 C++에서 Windows.h의 효율성 향상
  3. 효과 향상을 위해 C++ 프로그램에서 Windows.h를 대체할 하위 헤더 포함
C++에서 windows.h의 효율성 향상

#include <Windows.h>#include <bits/stdc++.h> 헤더 파일만큼 나쁜 습관이라는 것이 보편적으로 받아들여지고 있습니다. 이 자습서에서는 Windows.h의 유용성과 그것이 C++에서 나쁜 습관인지 좋은 습관인지에 대한 진실을 배웁니다.

windows.h는 각 표준 헤더(대부분이 불필요하고 이식할 수 없음)를 포함/파싱하기 때문에 using namespace std;와 결합될 때 훨씬 더 많기 때문에 C++ 프로그램의 네임스페이스에서 와 같은 많은 공통 이름을 특징으로 합니다. 다음으로 인해 다른 기능을 비효율적으로 사용할 수 없습니다.

그러나 bits/stdc++.husing namespace std;와 동일한 기능을 수행하더라도 Win32 프로그램의 기본 요구 사항입니다. 결합.

C++ 프로그램에서 NOMINMAX를 정의하여 Windows.h의 효율성 향상

windows.h와 관련된 MSDN 설명서는 특정 기능을 수행하기 위해 포함할 헤더 파일을 명시적으로 정의합니다. 매크로를 통해 포함하기 전에 불필요한 기능을 비활성화할 때만 windows.h를 포함하는 것은 나쁜 습관이 아닙니다.

C++ 프로그램에 windows.h를 포함하기 전에 NOMINMAX를 정의하십시오. 그렇지 않으면 std::minstd::max와 인터페이스할 minmax 매크로에 액세스할 수 있습니다. .

windows.h는 운영 체제별 헤더이며 WSDK(Windows 소프트웨어 개발 키트)와 함께 제공됩니다.

Windows에서 #include 지시문의 유용성을 높이려면 이를 사용하는 것이 좋습니다. 그러나 엔트리 레벨 또는 중급 C++ 개발자에게는 매우 복잡할 수 있으므로 windows.h를 사용해야 합니다.

일반적으로 함수가 인텐션인 상황에서는 windows.h를 사용하지 마세요. C++에서 좋은 프로그래밍의 핵심은 함수 대신 매크로를 사용하지 않는 것이기 때문입니다.

// operating system (OS) specific
#define NOMINMAX  // minimize the `windows.h` library
#include <Windows.h>

#include <iostream>  // for output

/* an alternative to `#define NOMINMAX`

- you can define min and max macro in the following way

#ifndef NOMINMAX
#define min(x,y) ((x) < (y) ? (x) : (y))
#define max(x,y) ((x) > (y) ? (x) : (y))
#endif

*/

// no use of `using namespace std;` | increase complexity and decrease
// efficiency

int main() { std::cout << "Successful!"; }

출력:

Successful!

Windows 관련 헤더 파일로서 Windows API 함수, 공통 매크로 및 다양한 함수 및 하위 시스템에 대한 데이터 유형에 대한 모든 선언을 보유하고 매우 큰 Windows 관련 함수를 C++ 프로그램의 일부로 정의합니다.

합리적인 대안이 없기 때문에 거의 모든 Windows 기반 C++ 프로그램의 일부입니다. 일부 불필요한 함수와 미리 정의된 변수를 제외하도록 추가로 컴파일할 수 있습니다.

WIN32_LEAN_AND_MEAN을 사용하여 C++에서 Windows.h의 효율성 향상

WIN32_LEAN_AND_MEANwindows.h를 호출하기 전에 정의되면 유용하지 않거나 필요한 일부 Windows 헤더를 우회합니다. windows.h 효율성을 높이는 가장 빠른 솔루션 중 하나입니다.

VC_EXTRALEAN 또는 WIN32_LEAN_AND_MEAN을 사용하여 windows.h 헤더 파일의 크기를 줄이십시오. 그러나 이러한 전처리기 중 하나를 사용하면 때때로 필요하지 않으며 다른 헤더 파일을 포함해야 합니다.

MSDN 검색을 사용하여 사용하려는 함수의 이름을 지정하면 해당 함수가 속한 헤더 파일을 알 수 있습니다.

덜 유용하거나 DDE, Windows 소켓, RPC, 셸 및 암호화와 같은 특정 용도의 API는 제외됩니다.

또한 OPENFILENAMEW에 대한 문서에는 commdlg.hwindows.h의 일부이지만 WIN32_LEAN_AND_MEAN은 이를 windows.h에서 제외하며 commdlg.h에 별도로 포함할 수 있다고 나와 있습니다. commdlg.hwindows.h에 정의된 매크로를 사용합니다.

#define WIN32_LEAN_AND_MEAN
#define VC_EXTRALEAN  // an alternative or addition
#include <Windows.h>

#include <iostream>  // output

int main() {
  int a = 5;
  int b = 7;
  int sol;

  sol = a * (b / a);

  std::cout << sol;
}

출력:

5

자주 사용되지 않는 일부 Windows API를 제외하므로 빌드 프로세스 속도가 빨라지고 Win32 헤더 파일의 크기가 줄어듭니다.

windows.h에는 그것과 다른 많은 하위 헤더가 포함됩니다. 따라서 하나를 구체적으로 정의하면 C++ 프로세스의 리소스를 최대화할 수 있습니다.

효과 향상을 위해 C++ 프로그램에서 Windows.h를 대체할 하위 헤더 포함

windows.h의 하위 헤더는 상당히 안정적인 방식으로 구성되어 있는 것 같습니다. windows.h를 전체적으로 사용하고 하나 또는 두 개의 기능만 사용하는 대신 필요를 정의하기 위해 더 작은 헤더 중 하나를 포함할 수 있습니다.

windef.h에는 windows.h의 많은 기본 기능이 포함되어 있으며 7,000줄 이상의 실제 코드를 기반으로 합니다. fileapi.hCreateFile, FindFirstFile 및 기타 유사한 기능을 정의합니다.

#include <fileapi.h>
#include <windef.h>

#include <iostream>

int main() {
  typedef struct tagPOINT {
    LONG x;
    LONG y;
  }

  POINT,
      *PPOINT, *NPPOINT, *LPPOINT;

  std::cout << "The operation is successful!";
}

출력:

The operation is successful!

또한 동기화 프리미티브(WaitForMultipleObjects, InitializeCriticalSection 또는 windows.h의 다른 동기화 기능 부분)에 synchapi.h를 사용할 수 있습니다.

debugapi.h 하위 헤더 파일은 OutputDebugString, IsDebuggerPresent 및 기타 디버깅 기능을 위한 것입니다.

Syed Hassan Sabeeh Kazmi avatar Syed Hassan Sabeeh Kazmi avatar

Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.

GitHub

관련 문장 - C++ Header