Makra možností kompilátoru
Tato makra řídí specifické funkce kompilátoru.
Makro | Popis |
---|---|
_ATL_ALL_WARNINGS |
Symbol, který umožňuje chyby v projektech převedených z předchozích verzí KNIHOVNY ATL. |
_ATL_APARTMENT_THREADED |
Definujte, jestli jeden nebo více objektů používá vlákno bytu. |
_ATL_CSTRING_EXPLICIT_CONSTRUCTORS |
Umožňuje explicitní CString konstruktory, které brání neúmyslným převodům. |
_ATL_ENABLE_PTM_WARNING |
Definujte toto makro tak, aby vyžadovalo standardní syntaxi jazyka C++. Generuje chybu kompilátoru C4867, pokud se k inicializaci ukazatele na členovou funkci používá nestandardní syntaxe. |
_ATL_FREE_THREADED |
Definujte, jestli jeden nebo více objektů používá volné nebo neutrální vlákno. |
_ATL_MODULES |
Umožňuje kompilovat projekty ATL s požadovanými moduly a používat ATL s moduly jazyka C++. |
_ATL_MULTI_THREADED |
Symbol, který označuje, že projekt má objekty označené jako Obě, Free nebo Neutral. Místo toho by se mělo makro _ATL_FREE_THREADED použít. |
_ATL_NO_AUTOMATIC_NAMESPACE |
Symbol, který brání výchozímu použití oboru názvů jako KNIHOVNY ATL. |
_ATL_NO_COM_SUPPORT |
Symbol, který brání kompilování kódu souvisejícího s objektem COM s vaším projektem. |
ATL_NO_VTABLE |
Symbol, který brání inicializaci ukazatele vtable v konstruktoru a destruktoru třídy. |
ATL_NOINLINE |
Symbol, který označuje, že funkce by neměla být vložena. |
_ATL_SINGLE_THREADED |
Definujte, jestli všechny objekty používají jeden model threadingu. |
_ATL_ALL_WARNINGS
Symbol, který umožňuje chyby v projektech převedených z předchozích verzí KNIHOVNY ATL.
#define _ATL_ALL_WARNINGS
Poznámky
Před verzí Visual C++ .NET 2002 zakázala ATL mnoho upozornění a nechala je zakázaná, aby se nikdy nezozorovala v uživatelském kódu. Konkrétně:
Podmíněný výraz C4127 je konstantní
C4786 Identifikátor: identifikátor byl zkrácen na znaky number v informacích o ladění.
Použité nestandardní rozšíření C4201: struktura/sjednocení bez názvů
C4103 'název_souboru': používá se #pragma pack ke změně zarovnání
C4291 "deklarace" : nebyl nalezen žádný odpovídající operátor, který by odstranil; paměť se neuvolní, pokud inicializace vyvolá výjimku
C4268 'identifier' : 'const' static/global data initialized with compiler-generated default constructor fills the object with zeros
Nedostupný kód C4702
V projektech převedených z předchozích verzí jsou tato upozornění stále zakázána hlavičkami knihoven.
Pokud chcete toto chování změnit, před zahrnutím hlaviček knihoven přidejte následující řádek do pch.h
souboru (stdafx.h
v sadě Visual Studio 2017 a starší).
#define _ATL_ALL_WARNINGS
Pokud je toto #define
přidání přidáno, hlavičky ATL jsou opatrní, aby zachovaly stav těchto upozornění, aby nebyly globálně zakázané (nebo pokud uživatel explicitně zakáže jednotlivá upozornění, nepovoluje je).
Nové projekty mají tuto #define
sadu ve výchozím nastavení v pch.h (stdafx.h v sadě Visual Studio 2017 a starší).
_ATL_APARTMENT_THREADED
Definujte, jestli jeden nebo více objektů používá vlákno bytu.
_ATL_APARTMENT_THREADED
Poznámky
Určuje vlákno bytu. Další možnosti a popis modelů podprocesů, které jsou k dispozici pro objekt ATL, naleznete v tématu Určení modelu a možnosti threading projektu, ATL Simple Object Wizard.
_ATL_CSTRING_EXPLICIT_CONSTRUCTORS
Umožňuje explicitní CString
konstruktory, které brání neúmyslným převodům.
_ATL_CSTRING_EXPLICIT_CONSTRUCTORS
Poznámky
Při definování tohoto konstruktoru jsou všechny CString
konstruktory, které přebírají jeden parametr, zkompilovány explicitním klíčovým slovem, což brání implicitním převodům vstupních argumentů. To například znamená, že pokud _UNICODE
se při definování pokusíte použít char*
řetězec jako CString
argument konstruktoru, výsledky chyby kompilátoru. Toto makro použijte v situacích, kdy potřebujete zabránit implicitní převodům mezi úzkými a širokými typy řetězců.
Pomocí makra pro všechny argumenty řetězce konstruktoru _T
můžete definovat _ATL_CSTRING_EXPLICIT_CONSTRUCTORS
a vyhnout se chybám kompilace bez ohledu na to, zda _UNICODE
je definován.
_ATL_ENABLE_PTM_WARNING
Definujte toto makro, aby bylo možné vynutit použití standardní syntaxe standardu ANSI C++ pro ukazatel na členské funkce. Použití tohoto makra způsobí, že se chyba kompilátoru C4867 vygeneruje, když se k inicializaci ukazatele na členovou funkci použije nestandardní syntaxe.
#define _ATL_ENABLE_PTM_WARNING
Poznámky
Knihovny ATL a MFC byly změněny tak, aby odpovídaly vylepšenému standardu souladu kompilátoru jazyka C++ microsoft C++. Podle standardu ANSI C++ by syntaxe ukazatele na členovou funkci třídy měla být &CMyClass::MyFunc
.
Pokud _ATL_ENABLE_PTM_WARNING
není definována (výchozí případ), ATL/MFC zakáže chybu C4867 v mapách maker (zejména mapy zpráv), aby kód vytvořený v dřívějších verzích mohl pokračovat v sestavování jako předtím. Pokud definujete _ATL_ENABLE_PTM_WARNING
, měl by kód odpovídat standardu jazyka C++.
Nestandardní formulář je však zastaralý. Existující kód je potřeba přesunout do standardní syntaxe jazyka C++. Například následující kód:
BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
ON_COMMAND(ID_MYCOMMAND, OnMycommand)
END_MESSAGE_MAP()
je potřeba změnit na:
BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
ON_COMMAND(ID_MYCOMMAND, &CMFCListViewDoc::OnMycommand)
END_MESSAGE_MAP()
Pro mapová makra přidejte znak ampersand '&'. V kódu byste neměli znovu přidávat znak.
_ATL_FREE_THREADED
Definujte, jestli jeden nebo více objektů používá volné nebo neutrální vlákno.
_ATL_FREE_THREADED
Poznámky
Určuje volné vlákno. Bezplatné vlákno je ekvivalentní modelu vícevláknového bytu. Viz Určení modelu threadingu projektu pro další možnosti vláken a Možnosti, PRŮVODCE jednoduchým objektem ATL pro popis modelů podprocesů, které jsou k dispozici pro objekt ATL.
_ATL_MODULES
Umožňuje kompilovat projekty ATL s permissive-
moduly C++ a používat atl.
_ATL_MODULES
_ATL_MULTI_THREADED
Symbol, který označuje, že projekt obsahuje objekty, které jsou označeny jako Obě, Free nebo Neutral.
_ATL_MULTI_THREADED
Poznámky
Pokud je tento symbol definovaný, ATL načte kód, který správně synchronizuje přístup k globálním datům. Nový kód by měl místo toho použít ekvivalentní makro _ATL_FREE_THREADED
.
_ATL_NO_AUTOMATIC_NAMESPACE
Symbol, který brání výchozímu použití oboru názvů jako KNIHOVNY ATL.
_ATL_NO_AUTOMATIC_NAMESPACE
Poznámky
Pokud tento symbol není definovaný, včetně atlbase.h
výchozích hodnot using namespace ATL
, což může vést ke konfliktům pojmenování. Chcete-li tomu zabránit, definujte tento symbol.
_ATL_NO_COM_SUPPORT
Symbol, který brání kompilování kódu souvisejícího s objektem COM s vaším projektem.
_ATL_NO_COM_SUPPORT
ATL_NO_VTABLE
Symbol, který brání inicializaci ukazatele vtable v konstruktoru a destruktoru třídy.
ATL_NO_VTABLE
Poznámky
Pokud je ukazatel vtable znemožněn inicializovat v konstruktoru a destruktoru třídy, může linker eliminovat virtuální tabulku a všechny funkce, na které odkazuje. Rozbalí na __declspec(novtable)
.
Příklad
class ATL_NO_VTABLE CMyClass2 :
ATL_NOINLINE
Symbol, který označuje, že funkce by neměla být vložena.
ATL_NOINLINE inline
myfunction()
{
...
}
Parametry
myfunction
Funkce, která by neměla být vložena.
Poznámky
Tento symbol použijte, pokud chcete zajistit, aby funkce nebyla vložena kompilátorem, i když musí být deklarována jako vložená, aby ji bylo možné umístit do souboru záhlaví. Rozbalí na __declspec(noinline)
.
_ATL_SINGLE_THREADED
Definujte, jestli všechny objekty používají jeden model threadingu.
_ATL_SINGLE_THREADED
Poznámky
Určuje, že objekt vždy běží v primárním vlákně MODELU COM. Viz Určení modelu threadingu projektu pro další možnosti vláken a Možnosti, PRŮVODCE jednoduchým objektem ATL pro popis modelů podprocesů, které jsou k dispozici pro objekt ATL.