Macros de opções do compilador

Essas macros controlam recursos específicos do compilador.

Macro Descrição
_ATL_ALL_WARNINGS Um símbolo que permite erros em projetos convertidos de versões anteriores da ATL.
_ATL_APARTMENT_THREADED Defina se um ou mais objetos usam Apartment Threading.
_ATL_CSTRING_EXPLICIT_CONSTRUCTORS Torna determinados construtores CString explícitos, impedindo conversões não intencionais.
_ATL_ENABLE_PTM_WARNING Defina essa macro para exigir a sintaxe padrão C++. Ele gera o erro do compilador C4867 quando a sintaxe não padrão é usada para inicializar um ponteiro para uma função de membro.
_ATL_FREE_THREADED Defina se um ou mais objetos usam Neutral ou Free Threading.
_ATL_MODULES Permite compilar projetos ATL com módulos permissivos e usar ATL com módulos C++.
_ATL_MULTI_THREADED Um símbolo que indica que o projeto tem objetos marcados como Ambos, Livre ou Neutro. A macro _ATL_FREE_THREADED deve ser usada em vez disso.
_ATL_NO_AUTOMATIC_NAMESPACE Um símbolo que impede o uso padrão do namespace como ATL.
_ATL_NO_COM_SUPPORT Um símbolo que impede que o código relacionado ao COM seja compilado com seu projeto.
ATL_NO_VTABLE Um símbolo que impede que o ponteiro vtable seja inicializado no construtor e no destruidor da classe.
ATL_NOINLINE Um símbolo que indica que uma função não deve ser embutida.
_ATL_SINGLE_THREADED Defina se todos os objetos usam o modelo de threading único.

_ATL_ALL_WARNINGS

Um símbolo que permite erros em projetos convertidos de versões anteriores da ATL.

#define _ATL_ALL_WARNINGS

Comentários

Antes do Visual C++ .NET 2002, a ATL desabilitou muitos avisos e os deixou desabilitados para que eles nunca aparecessem no código do usuário. Especificamente:

  • C4127 expressão condicional é constante

  • C4786 'identifier' : identificador foi truncado para caracteres 'number' nas informações de depuração

  • C4201 extensão não padrão usada: struct/união sem nome

  • C4103 'filename' : usado pacote #pragma para alterar o alinhamento

  • C4291 “declaração”: nenhuma exclusão de operador correspondente encontrada; a memória não será liberada se a inicialização gerar uma exceção

  • C4268 “identifier”: dados estáticos/globais 'const' inicializados com o construtor padrão gerado pelo compilador preenchem o objeto com zeros

  • C4702 Código inacessível

Em projetos convertidos de versões anteriores, esses avisos ainda são desabilitados pelos cabeçalhos das bibliotecas.

Para alterar esse comportamento, adicione a seguinte linha ao arquivo (stdafx.hno Visual Studio 2017 e versões anteriores) antes de incluir cabeçalhos de pch.h bibliotecas.

#define _ATL_ALL_WARNINGS

Se esse #define for adicionado, os cabeçalhos da ATL terão o cuidado de preservar o estado desses avisos para que eles não sejam desabilitados globalmente (ou se o usuário desabilitar explicitamente avisos individuais, não habilitá-los).

Novos projetos têm esse #define definido em pch.h (stdafx.h no Visual Studio 2017 e anterior) por padrão.

_ATL_APARTMENT_THREADED

Defina se um ou mais objetos usam Apartment Threading.

_ATL_APARTMENT_THREADED

Comentários

Especifica o threading de apartamento. Para outras opções e uma descrição dos modelos de threading disponíveis para um objeto ATL, consulte Como especificar o modelo de threading do projeto e Opções, Assistente de Objeto Simples da ATL.

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

Torna determinados construtores CString explícitos, impedindo conversões não intencionais.

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

Comentários

Quando esse construtor é definido, todos os CString construtores que usam um único parâmetro são compilados com a palavra-chave explícita, o que impede conversões implícitas de argumentos de entrada. Isso significa, por exemplo, que quando _UNICODE é definido, se você tentar usar uma char* cadeia de caracteres como um CString argumento de construtor, um erro de compilador resultará. Use essa macro quando precisar evitar conversões implícitas entre tipos de cadeia de caracteres estreitos e largos.

Usando a _T macro em todos os argumentos de cadeia de caracteres do construtor, você pode definir _ATL_CSTRING_EXPLICIT_CONSTRUCTORS e evitar erros de compilação, independentemente de estar _UNICODE definido.

_ATL_ENABLE_PTM_WARNING

Defina essa macro para forçar o uso da sintaxe padrão ANSI C++ para funções de ponteiro para membro. O uso dessa macro faz com que o erro do compilador C4867 seja gerado quando a sintaxe não padrão é usada para inicializar um ponteiro para uma função de membro.

#define _ATL_ENABLE_PTM_WARNING

Comentários

As bibliotecas ATL e MFC foram alteradas para corresponder à conformidade do C++ padrão aprimorada do compilador do Microsoft C++. De acordo com o padrão ANSI C++, a sintaxe de um ponteiro para uma função de membro de classe deve ser &CMyClass::MyFunc.

Quando _ATL_ENABLE_PTM_WARNING não está definido (o caso padrão), ATL/MFC desabilita o erro C4867 em mapas de macro (notavelmente mapas de mensagens) para que o código que foi criado em versões anteriores possa continuar a ser compilado como antes. Se você definir _ATL_ENABLE_PTM_WARNING, seu código deverá estar em conformidade com o padrão C++.

No entanto, o formulário não padrão foi preterido. Você precisa mover o código existente para a sintaxe padrão C++. Por exemplo, o código a seguir:

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

Deve ser alterado para:

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

Para macros de mapa, adicione o caractere comercial '&'. Você não deve adicionar o caractere novamente em seu código.

_ATL_FREE_THREADED

Defina se um ou mais objetos usam Neutral ou Free Threading.

_ATL_FREE_THREADED

Comentários

Especifica o threading livre. O threading livre é equivalente a um modelo de apartamento multithread. Confira Especificando o modelo de threading do projeto para outras opções de threading e Opções, Assistente de Objeto Simples da ATL para obter uma descrição dos modelos de threading disponíveis para um objeto ATL.

_ATL_MODULES

Permite compilar projetos ATL com e usar ATL com permissive-módulos C++.

_ATL_MODULES

_ATL_MULTI_THREADED

Um símbolo que indica que o projeto tem objetos marcados como Ambos, Livre ou Neutro.

_ATL_MULTI_THREADED

Comentários

Se esse símbolo for definido, a ATL extrairá o código que sincronizará corretamente o acesso aos dados globais. O novo código deve usar a macro _ATL_FREE_THREADED equivalente.

_ATL_NO_AUTOMATIC_NAMESPACE

Um símbolo que impede o uso padrão do namespace como ATL.

_ATL_NO_AUTOMATIC_NAMESPACE

Comentários

Se esse símbolo não estiver definido, inclusive atlbase.h executa using namespace ATL por padrão, o que pode levar a conflitos de nomenclatura. Para evitar isso, defina esse símbolo.

_ATL_NO_COM_SUPPORT

Um símbolo que impede que o código relacionado ao COM seja compilado com seu projeto.

_ATL_NO_COM_SUPPORT

ATL_NO_VTABLE

Um símbolo que impede que o ponteiro vtable seja inicializado no construtor e no destruidor da classe.

ATL_NO_VTABLE

Comentários

Se o ponteiro vtable for impedido de ser inicializado no construtor e no destruidor da classe, o vinculador poderá eliminar a vtable e todas as funções para as quais ele aponta. Expande para __declspec(novtable).

Exemplo

class ATL_NO_VTABLE CMyClass2 :

ATL_NOINLINE

Um símbolo que indica que uma função não deve ser embutida.

    ATL_NOINLINE inline
    myfunction()
    {
    ...
    }

Parâmetros

myfunction
A função que não deve ser embutida.

Comentários

Use esse símbolo se quiser garantir que uma função não seja embutida pelo compilador, mesmo que ela deva ser declarada como embutida para que possa ser colocada em um arquivo de cabeçalho. Expande para __declspec(noinline).

_ATL_SINGLE_THREADED

Defina se todos os objetos usam o modelo de threading único

_ATL_SINGLE_THREADED

Comentários

Especifica que o objeto sempre será executado no thread COM primário. Confira Especificando o modelo de threading do projeto para outras opções de threading e Opções, Assistente de Objeto Simples da ATL para obter uma descrição dos modelos de threading disponíveis para um objeto ATL.

Confira também

Macros