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 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 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 linha a seguir ao pch.h
arquivo (stdafx.h
no Visual Studio 2017 e anteriores) antes de incluir cabeçalhos de 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 explicit, 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, ocorrerá um erro do compilador. 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 _UNICODE
estar 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 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), o ATL/MFC desabilita o erro C4867 em mapas de macro (principalmente mapas de mensagens) para que o código 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 '&' e 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 e permissive-
usar ATL com 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, incluindo 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.