Partilhar via


Macros de Opções do Compilador

Observação

A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

Estes macros controlam funcionalidades específicas do compilador.

Macro Description
_ATL_ALL_WARNINGS Um símbolo que permite erros em projetos convertidos a partir de versões anteriores do ATL.
_ATL_APARTMENT_THREADED Defina se um ou mais dos seus objetos usam threading de apartamento.
_ATL_CSTRING_EXPLICIT_CONSTRUCTORS Torna certos CString construtores explícitos, prevenindo conversões não intencionais.
_ATL_ENABLE_PTM_WARNING Defina esta macro para exigir sintaxe padrão C++. 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 dos seus objetos usam threading livre ou neutro.
_ATL_MODULES Permite compilar projetos ATL com permissivo e usar ATL com módulos C++.
_ATL_MULTI_THREADED Um símbolo que indica que o projeto tem objetos marcados como Ambos, Livres ou Neutros. Deveria ser usado o macro _ATL_FREE_THREADED 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 código relacionado com COM seja compilado com o seu projeto.
ATL_NO_VTABLE Um símbolo que impede que o ponteiro vtable seja inicializado no construtor e destruidor da classe.
ATL_NOINLINE Um símbolo que indica uma função não deve estar em linha.
_ATL_SINGLE_THREADED Defina se todos os seus objetos usam o modelo de threading único.

_ATL_ALL_WARNINGS

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

#define _ATL_ALL_WARNINGS

Observações

Antes do Visual C++ .NET 2002, o ATL desativava muitos avisos e deixava-os desativados para que nunca aparecessem no código do utilizador. Specifically:

  • A expressão condicional de C4127 é constante

  • C4786 'identificador' : identificador foi truncado para caracteres de 'número' na informação de depuração

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

  • C4103 'nome do ficheiro': usado #pragma pack para alterar o alinhamento

  • C4291 'declaração': não foi encontrado nenhum operador correspondente eliminação; A memória não será libertada se a inicialização lançar uma exceção

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

  • Código C4702 inacessível

Em projetos convertidos a partir de versões anteriores, estes avisos continuam desativados pelos cabeçalhos das bibliotecas.

Para alterar este comportamento, adicione a linha seguinte ao pch.h ficheiro (stdafx.h no Visual Studio 2017 e anteriores) antes de incluir cabeçalhos de bibliotecas.

#define _ATL_ALL_WARNINGS

Se isto #define for adicionado, os cabeçalhos ATL têm o cuidado de preservar o estado destes avisos para que não sejam desativados globalmente (ou, se o utilizador desativar explicitamente avisos individuais, não os ativem).

Os novos projetos têm isto #define definido em pch.h (stdafx.h no Visual Studio 2017 e anteriores) por defeito.

_ATL_APARTMENT_THREADED

Defina se um ou mais dos seus objetos usam threading de apartamento.

_ATL_APARTMENT_THREADED

Observações

Especifica o enfiamento do apartamento. Para outras opções e uma descrição dos modelos de threading disponíveis para um objeto ATL, veja Especificar o Modelo e Opções de Threading do Projeto, ATL Simple Object Wizard.

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

Torna certos CString construtores explícitos, prevenindo conversões não intencionais.

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

Observações

Quando este construtor é definido, todos CString os construtores que aceitam um único parâmetro são compilados com a palavra-chave explícita, que impede conversões implícitas de argumentos de entrada. Isto significa, por exemplo, que quando _UNICODE é definido, se tentar usar uma char* cadeia como CString argumento construtor, resulta um erro no compilador. Usa esta macro em situações em que precisas de evitar conversões implícitas entre tipos de string estreitos e largos.

Ao usar a _T macro em todos os argumentos das strings construtoras, pode definir _ATL_CSTRING_EXPLICIT_CONSTRUCTORS e evitar erros de compilação independentemente de estar definida ou não _UNICODE .

_ATL_ENABLE_PTM_WARNING

Defina esta macro para forçar o uso de sintaxe ANSI C++ conforme ao padrão para funções de ponteiro para membros. Usar esta macro provoca o erro do compilador C4867 quando uma sintaxe não padrão é usada para inicializar um ponteiro para uma função membro.

#define _ATL_ENABLE_PTM_WARNING

Observações

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

Quando _ATL_ENABLE_PTM_WARNING não está definido (o caso predefinido), o ATL/MFC desativa o erro C4867 nos mapas de macros (nomeadamente mapas de mensagens) para que o código criado em versões anteriores possa continuar a ser construído como antes. Se definires _ATL_ENABLE_PTM_WARNING, o teu código deve estar em conformidade com o padrão C++.

No entanto, o formulário não padrão foi obsoleto. Precisas de mover código existente para sintaxe padrão C++. Por exemplo, o seguinte código:

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 do mapa, adiciona o carácter '&' do ampersand. Não deves adicionar a personagem novamente no teu código.

_ATL_FREE_THREADED

Defina se um ou mais dos seus objetos usam threading livre ou neutro.

_ATL_FREE_THREADED

Observações

Especifica rosca livre. A threading livre é equivalente a um modelo de apartamento multithread. Consulte Especificar o Modelo de Threading do Projeto para outras opções de threading, e Options, ATL Simple Object Wizard para uma descrição dos modelos de threading disponíveis para um objeto ATL.

_ATL_MODULES

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

_ATL_MODULES

_ATL_MULTI_THREADED

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

_ATL_MULTI_THREADED

Observações

Se este símbolo for definido, o ATL puxa código que sincroniza corretamente o acesso a dados globais. O novo código deve usar a macro _ATL_FREE_THREADED equivalente em vez disso.

_ATL_NO_AUTOMATIC_NAMESPACE

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

_ATL_NO_AUTOMATIC_NAMESPACE

Observações

Se este símbolo não estiver definido, incluindo atlbase.h o desempenho using namespace ATL por defeito, isso pode levar a conflitos de nomeação. Para evitar isto, defina este símbolo.

_ATL_NO_COM_SUPPORT

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

_ATL_NO_COM_SUPPORT

ATL_NO_VTABLE

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

ATL_NO_VTABLE

Observações

Se o ponteiro vtable for impedido de ser inicializado no construtor e destruidor da classe, o linker pode eliminar o vtable e todas as funções para as quais aponta. Expande-se para __declspec(novtable).

Example

class ATL_NO_VTABLE CMyClass2 :

ATL_NOINLINE

Um símbolo que indica uma função não deve estar em linha.

    ATL_NOINLINE inline
    myfunction()
    {
    ...
    }

Parâmetros

myfunction
A função que não devia ser inlineada.

Observações

Usa este símbolo se quiseres garantir que uma função não é inlineada pelo compilador, mesmo que tenha de ser declarada como inline para poder ser colocada num ficheiro de cabeçalho. Expande-se para __declspec(noinline).

_ATL_SINGLE_THREADED

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

_ATL_SINGLE_THREADED

Observações

Especifica que o objeto é sempre executado no thread principal COM. Consulte Especificar o Modelo de Threading do Projeto para outras opções de threading, e Options, ATL Simple Object Wizard para uma descrição dos modelos de threading disponíveis para um objeto ATL.

Consulte também

Macros