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.