Udostępnij za pośrednictwem


Makra opcji kompilatora

Te makra kontrolują określone funkcje kompilatora.

Makro opis
_ATL_ALL_WARNINGS Symbol, który umożliwia błędy w projektach przekonwertowanych z poprzednich wersji atl.
_ATL_APARTMENT_THREADED Określ, czy co najmniej jeden obiekt używa wątków apartamentowych.
_ATL_CSTRING_EXPLICIT_CONSTRUCTORS Sprawia, że niektóre CString konstruktory są jawne, uniemożliwiając wszelkie niezamierzone konwersje.
_ATL_ENABLE_PTM_WARNING Zdefiniuj to makro, aby wymagać standardowej składni języka C++. Generuje błąd kompilatora C4867, gdy niestandardowa składnia jest używana do inicjowania wskaźnika do funkcji składowej.
_ATL_FREE_THREADED Określ, czy co najmniej jeden obiekt używa wątków wolnych lub neutralnych.
_ATL_MODULES Umożliwia kompilowanie projektów ATL z permissive- i używanie atl z modułami języka C++.
_ATL_MULTI_THREADED Symbol wskazujący, że projekt ma obiekty oznaczone jako Oba, Wolne lub Neutralne. Zamiast tego należy użyć makra _ATL_FREE_THREADED .
_ATL_NO_AUTOMATIC_NAMESPACE Symbol, który uniemożliwia domyślne użycie przestrzeni nazw jako ATL.
_ATL_NO_COM_SUPPORT Symbol, który uniemożliwia kompilowanie kodu związanego z com w projekcie.
ATL_NO_VTABLE Symbol, który uniemożliwia zainicjowanie wskaźnika vtable w konstruktorze klasy i destruktorze.
ATL_NOINLINE Symbol wskazujący, że funkcja nie powinna być wciśnięta.
_ATL_SINGLE_THREADED Zdefiniuj, czy wszystkie obiekty używają modelu pojedynczego wątkowania.

_ATL_ALL_WARNINGS

Symbol, który umożliwia błędy w projektach przekonwertowanych z poprzednich wersji atl.

#define _ATL_ALL_WARNINGS

Uwagi

Przed programem Visual C++ .NET 2002 usługa ATL wyłączyła wiele ostrzeżeń i pozostawiła je wyłączone, aby nigdy nie były wyświetlane w kodzie użytkownika. Szczególnie:

  • Wyrażenie warunkowe C4127 jest stałe

  • C4786 "identyfikator" : identyfikator został obcięty do znaków "number" w informacjach debugowania

  • Użyto niestandardowego rozszerzenia C4201: beznazwanej struktury/unii

  • C4103 "nazwa pliku": użyto pakietu #pragma do zmiany wyrównania

  • C4291 "deklaracja" : nie znaleziono pasującego operatora usuwania; pamięć nie zostanie zwolniona, jeśli inicjalizacja zgłasza wyjątek

  • C4268 "identifier" : "const" statyczne/globalne dane zainicjowane za pomocą konstruktora domyślnego wygenerowanego przez kompilator wypełnia obiekt zerami

  • Kod C4702 niemożliwy do osiągnięcia

W projektach przekonwertowanych z poprzednich wersji te ostrzeżenia są nadal wyłączone przez nagłówki bibliotek.

Aby zmienić to zachowanie, przed dołączeniem nagłówków bibliotek dodaj następujący wiersz do pch.h pliku (stdafx.h w programie Visual Studio 2017 i starszych wersjach).

#define _ATL_ALL_WARNINGS

Jeśli zostanie to #define dodane, nagłówki ATL są ostrożne, aby zachować stan tych ostrzeżeń, aby nie były wyłączone globalnie (lub jeśli użytkownik jawnie wyłącza poszczególne ostrzeżenia, nie włączać ich).

Nowe projekty mają ten #define zestaw domyślnie w pliku pch.h (stdafx.h w programie Visual Studio 2017 i starszych wersjach).

_ATL_APARTMENT_THREADED

Określ, czy co najmniej jeden obiekt używa wątków apartamentowych.

_ATL_APARTMENT_THREADED

Uwagi

Określa wątki apartamentów. Aby zapoznać się z innymi opcjami i opisem modeli wątkowych dostępnych dla obiektu ATL, zobacz Określanie modelu wątkowania i opcji projektu, Kreatora prostego obiektu ATL.

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

Sprawia, że niektóre CString konstruktory są jawne, uniemożliwiając wszelkie niezamierzone konwersje.

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

Uwagi

Po zdefiniowaniu tego konstruktora wszystkie CString konstruktory, które przyjmują pojedynczy parametr, są kompilowane za pomocą jawnego słowa kluczowego, co uniemożliwia niejawną konwersję argumentów wejściowych. Oznacza to na przykład, że gdy _UNICODE jest zdefiniowany, jeśli próbujesz użyć char* ciągu jako CString argumentu konstruktora, wynik błędu kompilatora. Użyj tego makra w sytuacjach, w których należy zapobiec niejawnej konwersji między wąskimi i szerokimi typami ciągów.

Używając makra _T we wszystkich argumentach ciągu konstruktora, można zdefiniować _ATL_CSTRING_EXPLICIT_CONSTRUCTORS i uniknąć błędów kompilacji niezależnie od tego, czy _UNICODE jest zdefiniowany.

_ATL_ENABLE_PTM_WARNING

Zdefiniuj to makro, aby wymusić użycie standardowej składni anSI C++ dla wskaźników do funkcji składowych. Użycie tego makra powoduje wygenerowanie błędu kompilatora C4867, gdy niestandardowa składnia jest używana do inicjowania wskaźnika do funkcji składowej.

#define _ATL_ENABLE_PTM_WARNING

Uwagi

Biblioteki ATL i MFC zostały zmienione tak, aby były zgodne z ulepszoną standardową zgodnością języka C++ kompilatora Microsoft C++. Zgodnie ze standardem ANSI C++ składnia wskaźnika do funkcji składowej klasy powinna mieć wartość &CMyClass::MyFunc.

Jeśli _ATL_ENABLE_PTM_WARNING nie jest zdefiniowany (przypadek domyślny), ATL/MFC wyłącza błąd C4867 w mapach makr (zwłaszcza mapy komunikatów), aby kod utworzony we wcześniejszych wersjach mógł kontynuować kompilowanie tak jak wcześniej. Jeśli zdefiniujesz _ATL_ENABLE_PTM_WARNING, kod powinien być zgodny ze standardem C++.

Jednak postać niestandardowa została przestarzała. Musisz przenieść istniejący kod do standardowej składni języka C++. Na przykład następujący kod:

BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
   ON_COMMAND(ID_MYCOMMAND, OnMycommand)
END_MESSAGE_MAP()

Należy zmienić na:

BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
   ON_COMMAND(ID_MYCOMMAND, &CMFCListViewDoc::OnMycommand)
END_MESSAGE_MAP()

W przypadku makr mapy dodaj znak ampersand "&". Nie należy ponownie dodawać znaku w kodzie.

_ATL_FREE_THREADED

Określ, czy co najmniej jeden obiekt używa wątków wolnych lub neutralnych.

_ATL_FREE_THREADED

Uwagi

Określa wolne wątki. Wolne wątkowość jest odpowiednikiem modelu apartamentów wielowątków. Aby uzyskać opis modeli wątków dostępnych dla obiektu ATL, zobacz Określanie modelu wątkowego projektu dla innych opcji wątkowania i Opcje Kreatora prostego obiektu ATL.

_ATL_MODULES

Umożliwia kompilowanie projektów ATL z modułami permissive-języka C++ i korzystanie z niego.

_ATL_MODULES

_ATL_MULTI_THREADED

Symbol wskazujący, że projekt zawiera obiekty oznaczone jako Oba, Wolne lub Neutralne.

_ATL_MULTI_THREADED

Uwagi

Jeśli ten symbol jest zdefiniowany, usługa ATL pobiera kod, który będzie poprawnie synchronizować dostęp do danych globalnych. Nowy kod powinien zamiast tego używać równoważnego makra _ATL_FREE_THREADED .

_ATL_NO_AUTOMATIC_NAMESPACE

Symbol, który uniemożliwia domyślne użycie przestrzeni nazw jako ATL.

_ATL_NO_AUTOMATIC_NAMESPACE

Uwagi

Jeśli ten symbol nie jest zdefiniowany, w tym atlbase.h domyślnie występuje using namespace ATL , co może prowadzić do konfliktów nazewnictwa. Aby temu zapobiec, zdefiniuj ten symbol.

_ATL_NO_COM_SUPPORT

Symbol, który uniemożliwia kompilowanie kodu związanego z com w projekcie.

_ATL_NO_COM_SUPPORT

ATL_NO_VTABLE

Symbol, który uniemożliwia zainicjowanie wskaźnika vtable w konstruktorze klasy i destruktorze.

ATL_NO_VTABLE

Uwagi

Jeśli wskaźnik tabeli wirtualnej nie zostanie zainicjowany w konstruktorze klasy i destruktorze, konsolidator może wyeliminować tabelę wirtualną i wszystkie funkcje, do których wskazuje. Rozwija się do __declspec(novtable).

Przykład

class ATL_NO_VTABLE CMyClass2 :

ATL_NOINLINE

Symbol wskazujący, że funkcja nie powinna być wciśnięta.

    ATL_NOINLINE inline
    myfunction()
    {
    ...
    }

Parametry

myfunction
Funkcja, która nie powinna być podkreślona.

Uwagi

Użyj tego symbolu, jeśli chcesz upewnić się, że funkcja nie zostanie wzwierszona przez kompilator, mimo że musi być zadeklarowana jako śródwierszowa, aby można ją było umieścić w pliku nagłówka. Rozwija się do __declspec(noinline).

_ATL_SINGLE_THREADED

Zdefiniuj, czy wszystkie obiekty korzystają z modelu pojedynczego wątkowania

_ATL_SINGLE_THREADED

Uwagi

Określa, że obiekt zawsze jest uruchamiany w podstawowym wątku COM. Aby uzyskać opis modeli wątków dostępnych dla obiektu ATL, zobacz Określanie modelu wątkowego projektu dla innych opcji wątkowania i Opcje Kreatora prostego obiektu ATL.

Zobacz też

Makra