다음을 통해 공유


컴파일러 옵션 매크로

이러한 매크로는 특정 컴파일러 기능을 제어합니다.

매크로 설명
_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 생성자가 명시적 키워드(keyword) 컴파일되어 입력 인수의 암시적 변환을 방지합니다. 예를 들어 _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 단순 개체 마법사에 대한 프로젝트의 스레딩 모델 지정을 참조하세요.

참고 항목

매크로