컴파일러 옵션 매크로
이러한 매크로는 특정 컴파일러 기능을 제어합니다.
매크로 | 설명 |
---|---|
_ATL_ALL_WARNINGS |
이전 버전의 ATL에서 변환된 프로젝트에서 오류를 사용하도록 설정하는 기호입니다. |
_ATL_APARTMENT_THREADED |
하나 이상의 개체가 아파트 스레딩을 사용하는지 여부를 정의합니다. |
_ATL_CSTRING_EXPLICIT_CONSTRUCTORS |
특정 CString 생성자를 명시적으로 설정하여 의도하지 않은 변환을 방지합니다. |
_ATL_ENABLE_PTM_WARNING |
C++ 표준 구문을 요구하도록 이 매크로를 정의합니다. 비표준 구문을 사용하여 멤버 함수에 대한 포인터를 초기화하는 경우 C4867 컴파일러 오류가 생성됩니다. |
_ATL_FREE_THREADED |
하나 이상의 개체가 자유 스레딩 또는 중립 스레딩을 사용하는지 정의합니다. |
_ATL_MODULES |
허용되는 ATL 프로젝트를 컴파일하고 C++ 모듈에서 ATL을 사용할 수 있습니다. |
_ATL_MULTI_THREADED |
프로젝트에 둘 다, 자유 또는 중립으로 표시된 개체가 있음을 나타내는 기호입니다. 대신 매크로 _ATL_FREE_THREADED 를 사용해야 합니다. |
_ATL_NO_AUTOMATIC_NAMESPACE |
네임스페이스를 ATL로 기본적으로 사용하지 못하게 하는 기호입니다. |
_ATL_NO_COM_SUPPORT |
COM 관련 코드가 프로젝트와 함께 컴파일되지 않도록 하는 기호입니다. |
ATL_NO_VTABLE |
클래스의 생성자 및 소멸자에서 vtable 포인터가 초기화되지 않도록 하는 기호입니다. |
ATL_NOINLINE |
함수를 인라인으로 표시해서는 안 됨을 나타내는 기호입니다. |
_ATL_SINGLE_THREADED |
모든 개체가 단일 스레딩 모델을 사용하는지 정의합니다. |
_ATL_ALL_WARNINGS
이전 버전의 ATL에서 변환된 프로젝트에서 오류를 사용하도록 설정하는 기호입니다.
#define _ATL_ALL_WARNINGS
설명
Visual C++ .NET 2002 이전에는 ATL에서 많은 경고를 사용하지 않도록 설정하고 사용하지 않도록 설정하여 사용자 코드에 표시되지 않도록 했습니다. 특별한 사항
C4127 조건식이 상수입니다.
C4786 'identifier': 식별자가 디버그 정보의 'number' 문자로 잘렸습니다.
C4201 비표준 확장 사용: 이름 없는 구조체/공용 구조체
C4103 'filename' : #pragma 팩을 사용하여 맞춤 변경
C4291 'declaration': 일치하는 연산자 삭제를 찾을 수 없습니다. 초기화에서 예외를 throw하면 메모리가 해제되지 않습니다.
C4268 'identifier': 컴파일러 생성 기본 생성자로 초기화된 'const' 정적/전역 데이터가 개체를 0으로 채웁니다.
C4702에 연결할 수 없는 코드
이전 버전에서 변환된 프로젝트에서 이러한 경고는 라이브러리 헤더에서 계속 사용하지 않도록 설정됩니다.
이 동작을 변경하려면 라이브러리 헤더를 포함하기 pch.h
전에 다음stdafx.h
줄을 Visual Studio 2017 이하의 파일에 추가합니다.
#define _ATL_ALL_WARNINGS
이 경고가 #define
추가되면 ATL 헤더는 이러한 경고의 상태를 유지하여 전역적으로 사용하지 않도록 설정하지 않도록 주의합니다(또는 사용자가 개별 경고를 명시적으로 사용하지 않도록 설정하는 경우 사용하지 않도록 설정하지 않음).
새 프로젝트에는 #define
기본적으로 pch.h(Visual Studio 2017 이하의 stdafx.h)로 설정됩니다.
_ATL_APARTMENT_THREADED
하나 이상의 개체가 아파트 스레딩을 사용하는지 여부를 정의합니다.
_ATL_APARTMENT_THREADED
설명
아파트 스레딩을 지정합니다. 다른 옵션 및 ATL 개체에 사용할 수 있는 스레딩 모델에 대한 설명은 프로젝트의 스레딩 모델 및 옵션 지정, ATL 단순 개체 마법사를 참조하세요.
_ATL_CSTRING_EXPLICIT_CONSTRUCTORS
특정 CString
생성자를 명시적으로 설정하여 의도하지 않은 변환을 방지합니다.
_ATL_CSTRING_EXPLICIT_CONSTRUCTORS
설명
이 생성자가 정의되면 단일 매개 변수를 사용하는 모든 CString
생성자가 명시적 키워드를 사용하여 컴파일되므로 입력 인수의 암시적 변환이 방지됩니다. 예를 들어 _UNICODE
정의되는 경우 문자열을 생성자 인수로 CString
사용 char*
하려고 하면 컴파일러 오류가 발생합니다. 좁은 문자열 형식과 와이드 문자열 형식 간의 암시적 변환을 방지해야 하는 경우 이 매크로를 사용합니다.
모든 생성자 문자열 인수에 매크로를 사용하면 _T
정의 여부에 _UNICODE
관계없이 컴파일 오류를 정의 _ATL_CSTRING_EXPLICIT_CONSTRUCTORS
하고 방지할 수 있습니다.
_ATL_ENABLE_PTM_WARNING
멤버 함수에 대한 포인터에 ANSI C++ 표준 준수 구문을 강제로 사용하기 위해 이 매크로를 정의합니다. 이 매크로를 사용하면 비표준 구문을 사용하여 멤버 함수에 대한 포인터를 초기화할 때 C4867 컴파일러 오류가 생성됩니다.
#define _ATL_ENABLE_PTM_WARNING
설명
ATL 및 MFC 라이브러리가 Microsoft C++ 컴파일러의 향상된 표준 C++ 규칙과 일치하도록 변경되었습니다. ANSI C++ 표준에 따라 클래스 멤버 함수에 대한 포인터의 구문은 이어야 &CMyClass::MyFunc
합니다.
정의되지 않은 경우 _ATL_ENABLE_PTM_WARNING
(기본 사례) ATL/MFC는 이전 버전에서 만든 코드가 이전처럼 계속 빌드되도록 매크로 맵(특히 메시지 맵)에서 C4867 오류를 사용하지 않도록 설정합니다. 정의하는 _ATL_ENABLE_PTM_WARNING
경우 코드는 C++ 표준을 준수해야 합니다.
그러나 비표준 양식은 더 이상 사용되지 않습니다. 기존 코드를 C++ 표준 구문으로 이동해야 합니다. 예를 들어, 다음 코드는
BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
ON_COMMAND(ID_MYCOMMAND, OnMycommand)
END_MESSAGE_MAP()
다음으로 변경되어야 합니다.
BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
ON_COMMAND(ID_MYCOMMAND, &CMFCListViewDoc::OnMycommand)
END_MESSAGE_MAP()
지도 매크로의 경우 앰퍼샌드 '> 문자를 추가합니다. 코드에 문자를 다시 추가하면 안 됩니다.
_ATL_FREE_THREADED
하나 이상의 개체가 자유 스레딩 또는 중립 스레딩을 사용하는지 정의합니다.
_ATL_FREE_THREADED
설명
자유 스레딩을 지정합니다. 무료 스레딩은 다중 스레드 아파트 모델과 동일합니다. ATL 개체에 사용할 수 있는 스레딩 모델에 대한 설명은 다른 스레딩 옵션 및 옵션, ATL 단순 개체 마법사에 대한 프로젝트의 스레딩 모델 지정을 참조하세요.
_ATL_MODULES
C++ 모듈에서 ATL 프로젝트를 permissive-
컴파일하고 사용할 수 있습니다.
_ATL_MODULES
_ATL_MULTI_THREADED
프로젝트에 둘 다, 자유 또는 중립으로 표시된 개체가 있음을 나타내는 기호입니다.
_ATL_MULTI_THREADED
설명
이 기호가 정의되면 ATL은 전역 데이터에 대한 액세스를 올바르게 동기화하는 코드를 가져옵니다. 새 코드는 해당 매크로 _ATL_FREE_THREADED
를 대신 사용해야 합니다.
_ATL_NO_AUTOMATIC_NAMESPACE
네임스페이스를 ATL로 기본적으로 사용하지 못하게 하는 기호입니다.
_ATL_NO_AUTOMATIC_NAMESPACE
설명
기본적으로 수행을 포함하여 atlbase.h
이 기호가 using namespace ATL
정의되지 않은 경우 명명 충돌이 발생할 수 있습니다. 이를 방지하려면 이 기호를 정의합니다.
_ATL_NO_COM_SUPPORT
COM 관련 코드가 프로젝트와 함께 컴파일되지 않도록 하는 기호입니다.
_ATL_NO_COM_SUPPORT
ATL_NO_VTABLE
클래스의 생성자 및 소멸자에서 vtable 포인터가 초기화되지 않도록 하는 기호입니다.
ATL_NO_VTABLE
설명
vtable 포인터가 클래스의 생성자 및 소멸자에서 초기화되지 않는 경우 링커는 vtable 및 해당 포인터가 가리키는 모든 함수를 제거할 수 있습니다. 으로 확장됩니다 __declspec(novtable)
.
예시
class ATL_NO_VTABLE CMyClass2 :
ATL_NOINLINE
함수를 인라인으로 표시해서는 안 됨을 나타내는 기호입니다.
ATL_NOINLINE inline
myfunction()
{
...
}
매개 변수
myfunction
인라인화해서는 안 되는 함수입니다.
설명
헤더 파일에 배치할 수 있도록 인라인으로 선언해야 하는 경우에도 함수가 컴파일러에 인라인되지 않도록 하려면 이 기호를 사용합니다. 으로 확장됩니다 __declspec(noinline)
.
_ATL_SINGLE_THREADED
모든 개체가 단일 스레딩 모델을 사용하는지 정의
_ATL_SINGLE_THREADED
설명
개체가 항상 기본 COM 스레드에서 실행되도록 지정합니다. ATL 개체에 사용할 수 있는 스레딩 모델에 대한 설명은 다른 스레딩 옵션 및 옵션, ATL 단순 개체 마법사에 대한 프로젝트의 스레딩 모델 지정을 참조하세요.