Sdílet prostřednictvím


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.

Viz také

Makra