C ++에서 정의하는 WIN32와 _WIN32의 차이점은 무엇입니까?
나는 그것이 WIN32win32 컴파일 을 나타내는 것을 알고 있지만 무엇을 _WIN32위해 사용됩니까?
WIN32자신의 코드에서 사용하고 정의 할 수있는 이름이므로 Microsoft의 사용과 충돌 할 수 있습니다. _WIN32밑줄과 대문자로 시작하기 때문에 구현 자 (이 경우 Microsoft)를 위해 예약 된 이름입니다. 자체 코드에서 예약 된 이름을 정의 할 수 없으므로 충돌이 없습니다.
자세히 설명하기 위해 (Neil Butterworth 및 blue.tuxedo는 이미 정답을 제공했습니다) :
WIN32SDK 또는 빌드 환경에서 정의하므로 구현 예약 네임 스페이스를 사용하지 않습니다._WIN32컴파일러에 의해 정의 되므로 밑줄을 사용하여 구현 예약 네임 스페이스에 배치합니다.
당신은 거의 동일한 이름과 같은 유사한 용도로 듀얼을 정의 비슷한 설정을 찾을 수 있습니다 _UNICODE/ UNICODE, _DEBUG/ DEBUG, 또는 어쩌면 _DLL/ DLL(난 단지 유니 코드 사람이 서로 다른 버전의 모든 사용의 많은 수 있다고 생각). 때로는 이러한 경우 (예 _UNICODE:) 컴파일러에 의해 정의 되는 밑줄 버전 대신 CRT 헤더가 수행하는 작업을 제어하는 데 사용됩니다.
_UNICODE유니 코드 또는 ANSI 일 수있는 CRT 이름 (예 :_tcslen()와이드 문자 변형 (wcslen())에 매핑되어야 함)을 CRT 헤더에 알립니다.UNICODESDK에 대해 유사한 작업을 수행합니다 (Win32 API를 "W"변형에 매핑 ).
기본적으로 밑줄이있는 버전은 컴파일러 팀에서 제어하거나 사용하고, 밑줄이없는 버전은 컴파일러 외부의 팀에서 제어 / 사용합니다. 물론 이전 버전과의 호환성과 한 팀 또는 다른 팀의 일반적인 실수로 인해 많은 중복이있을 수 있습니다.
나는 그것이 지옥처럼 혼란스럽고 사용자 코드에서 거의 같은 의미로 사용된다는 것을 발견했습니다. 개인적으로 밑줄이없는 버전을 사용 하고 (컴파일러의 런타임을 작성하지 않는 한) 버전을 정의 할 때 둘 다 (청각 자 또는 컴파일러 스위치를 통해 적절하게) 정의되었는지 확인해야한다고 생각합니다.
SDK는 _WIN32Mac 용으로 빌드 할 때 정의 합니다. 컴파일러는 그렇지 않기 때문에 한계를 뛰어 넘습니다. 어떤 프로젝트가 Win32 API를 사용하고 Mac을 대상으로하는 컴파일러를 사용하는지 잘 모르겠습니다. 일부 버전의 Office for the Max 등일 수도 있습니다.
WIN32는 일부 헤더에 필요할 수있는 사용자 정의 플래그입니다. _WIN32는 Visual C / C ++ 컴파일러에 의해 자동으로 정의됩니다. _로 시작하고 뒤에 대문자가 나오므로 구현 (C / C ++ 도구 체인 공급자를 의미)에서 예약됩니다.
나는 _WIN32를 사용하는 것을 선호합니다.
'program story' 카테고리의 다른 글
| Windows에서 Ubuntu 하위 시스템으로 파일 복사 (0) | 2020.11.04 |
|---|---|
| ButtonGroup에서 어떤 JRadioButton이 선택되었는지 어떻게 알 수 있습니까? (0) | 2020.11.04 |
| SQLite 데이터베이스에 이미지를 저장하는 방법 (0) | 2020.11.04 |
| Python-데이터 프레임의 차원 (0) | 2020.11.04 |
| Entity Framework 5 엔터티의 전체 복사 / 복제 (0) | 2020.11.04 |