C++에서 windows.h의 효율성 향상
-
C++ 프로그램에서
NOMINMAX
를 정의하여Windows.h
의 효율성 향상 -
WIN32_LEAN_AND_MEAN
을 사용하여 C++에서Windows.h
의 효율성 향상 -
효과 향상을 위해 C++ 프로그램에서
Windows.h
를 대체할 하위 헤더 포함

#include <Windows.h>
는 #include <bits/stdc++.h>
헤더 파일만큼 나쁜 습관이라는 것이 보편적으로 받아들여지고 있습니다. 이 자습서에서는 Windows.h
의 유용성과 그것이 C++에서 나쁜 습관인지 좋은 습관인지에 대한 진실을 배웁니다.
windows.h
는 각 표준 헤더(대부분이 불필요하고 이식할 수 없음)를 포함/파싱하기 때문에 using namespace std;
와 결합될 때 훨씬 더 많기 때문에 C++ 프로그램의 네임스페이스에서 와 같은 많은 공통 이름을 특징으로 합니다. 다음
으로 인해 다른 기능을 비효율적으로 사용할 수 없습니다.
그러나 bits/stdc++.h
및 using namespace std;
와 동일한 기능을 수행하더라도 Win32 프로그램의 기본 요구 사항입니다. 결합.
C++ 프로그램에서 NOMINMAX
를 정의하여 Windows.h
의 효율성 향상
windows.h
와 관련된 MSDN 설명서는 특정 기능을 수행하기 위해 포함할 헤더 파일을 명시적으로 정의합니다. 매크로를 통해 포함하기 전에 불필요한 기능을 비활성화할 때만 windows.h
를 포함하는 것은 나쁜 습관이 아닙니다.
C++ 프로그램에 windows.h
를 포함하기 전에 NOMINMAX
를 정의하십시오. 그렇지 않으면 std::min
및 std::max
와 인터페이스할 min
및 max
매크로에 액세스할 수 있습니다. .
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_MEAN
이 windows.h
를 호출하기 전에 정의되면 유용하지 않거나 필요한 일부 Windows 헤더를 우회합니다. windows.h
효율성을 높이는 가장 빠른 솔루션 중 하나입니다.
VC_EXTRALEAN
또는 WIN32_LEAN_AND_MEAN
을 사용하여 windows.h
헤더 파일의 크기를 줄이십시오. 그러나 이러한 전처리기 중 하나를 사용하면 때때로 필요하지 않으며 다른 헤더 파일을 포함해야 합니다.
MSDN 검색을 사용하여 사용하려는 함수의 이름을 지정하면 해당 함수가 속한 헤더 파일을 알 수 있습니다.
덜 유용하거나 DDE, Windows 소켓, RPC, 셸 및 암호화와 같은 특정 용도의 API는 제외됩니다.
또한 OPENFILENAMEW
에 대한 문서에는 commdlg.h
가 windows.h
의 일부이지만 WIN32_LEAN_AND_MEAN
은 이를 windows.h
에서 제외하며 commdlg.h
에 별도로 포함할 수 있다고 나와 있습니다. commdlg.h
는 windows.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.h
는 CreateFile
, 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
및 기타 디버깅 기능을 위한 것입니다.
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