Compartir a través de


Macros de opciones del compilador

Estas macros controlan características específicas del compilador.

Macro Descripción
_ATL_ALL_WARNINGS Símbolo que permite errores en los proyectos convertidos desde versiones anteriores de ATL.
_ATL_APARTMENT_THREADED Defina si uno o varios de los objetos usan subprocesamiento de apartamento.
_ATL_CSTRING_EXPLICIT_CONSTRUCTORS Hace que determinados constructores CString sean explícitos, lo que impide cualquier conversión involuntaria.
_ATL_ENABLE_PTM_WARNING Defina esta macro para solicitar la sintaxis estándar de C++. Genera el error del compilador C4867 cuando se usa la sintaxis no estándar para inicializar un puntero a una función miembro.
_ATL_FREE_THREADED Defina si uno o varios de los objetos usan subprocesos libres o neutros.
_ATL_MODULES Permite compilar proyectos ATL con permisivo y usar ATL con módulos de C++.
_ATL_MULTI_THREADED Símbolo que indica que el proyecto tiene objetos marcados como Ambos, Libres o Neutros. La macro _ATL_FREE_THREADED debe usarse en su lugar.
_ATL_NO_AUTOMATIC_NAMESPACE Símbolo que impide el uso predeterminado del espacio en nombres como ATL.
_ATL_NO_COM_SUPPORT Símbolo que impide que el código relacionado con COM se compile con el proyecto.
ATL_NO_VTABLE Símbolo que impide que el puntero de la vtable se inicialice en el constructor y destructor de la clase.
ATL_NOINLINE Símbolo que indica que una función no debe insertarse.
_ATL_SINGLE_THREADED Defina si todos los objetos usan el modelo de subprocesos único.

_ATL_ALL_WARNINGS

Símbolo que permite errores en los proyectos convertidos desde versiones anteriores de ATL.

#define _ATL_ALL_WARNINGS

Comentarios

Antes de Visual C++ .NET 2002, ATL deshabilitaba muchas advertencias y las dejaba deshabilitadas para que nunca aparecieran en el código de usuario. Específicamente:

  • La expresión condicional C4127 es constante

  • C4786 'identifier' : el identificador se ha truncado a caracteres 'numéricos' en la información de depuración

  • Se ha usado una extensión no estándar C4201: estructura o unión sin nombre

  • C4103 'filename': usado en #pragma pack para cambiar la alineación

  • C4291 'declaration': no se ha encontrado un operador de eliminación que coincida; la memoria no se liberará si la inicialización produce una excepción

  • C4268 'identifier': los datos estáticos o globales 'const' inicializados con el constructor predeterminado que se ha generado por el compilador llenan el objeto con ceros

  • Código inaccesible C4702

En los proyectos convertidos desde versiones anteriores, estas advertencias siguen deshabilitadas por los encabezados de las bibliotecas.

Para cambiar este comportamiento, agregue la siguiente línea al pch.h archivo (stdafx.h en Visual Studio 2017 y versiones anteriores) antes de incluir encabezados de bibliotecas.

#define _ATL_ALL_WARNINGS

Si esto #define se agrega, los encabezados ATL tienen cuidado de preservar el estado de estas advertencias para que no se deshabiliten globalmente (o si el usuario deshabilita explícitamente las advertencias individuales, para no habilitarlas).

Los nuevos proyectos tienen esto #define establecido en pch.h (stdafx.h en Visual Studio 2017 y versiones anteriores) de forma predeterminada.

_ATL_APARTMENT_THREADED

Defina si uno o varios de los objetos usan subprocesamiento de apartamento.

_ATL_APARTMENT_THREADED

Comentarios

Especifica el subprocesamiento de apartamento. Para ver otras opciones y una descripción de los modelos de subprocesos disponibles para un objeto ATL, vea Especificar el modelo y las opciones de subprocesamiento del proyecto y Opciones, Asistente para objetos simples ATL.

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

Hace que determinados constructores CString sean explícitos, lo que impide cualquier conversión involuntaria.

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

Comentarios

Cuando se define este constructor, todos los CString constructores que toman un único parámetro se compilan con la palabra clave explícita, lo que impide conversiones implícitas de argumentos de entrada. Esto significa, por ejemplo, que cuando _UNICODE se define, si intenta usar una char* cadena como CString argumento de constructor, se produce un error del compilador. Use esta macro en situaciones en las que necesite evitar conversiones implícitas entre las cadenas de tipo estrecho y ancho.

Mediante el uso de la _T macro en todos los argumentos de cadena de constructor, puede definir _ATL_CSTRING_EXPLICIT_CONSTRUCTORS y evitar errores de compilación independientemente de si _UNICODE se define.

_ATL_ENABLE_PTM_WARNING

Defina esta macro para forzar el uso de la sintaxis que cumple con el estándar de ANSI C++ para el puntero a las funciones miembro. El uso de esta macro hace que se genere el error del compilador C4867 cuando se usa sintaxis no estándar para inicializar un puntero a una función miembro.

#define _ATL_ENABLE_PTM_WARNING

Comentarios

Las bibliotecas ATL y MFC se han cambiado para que coincidan con el cumplimiento estándar C++ mejorada del compilador de Microsoft C++. Según el estándar ANSI C++, la sintaxis de un puntero a una función miembro de una clase debe ser &CMyClass::MyFunc.

Cuando _ATL_ENABLE_PTM_WARNING no se define (el caso predeterminado), ATL/MFC deshabilita el error C4867 en los mapas de macros (en particular los mapas de mensajes) para que el código creado en versiones anteriores pueda seguir compilando como antes. Si define _ATL_ENABLE_PTM_WARNING, el código debe ajustarse al estándar de C++.

Sin embargo, el formulario no estándar ha quedado en desuso. Debe mover el código existente a la sintaxis estándar de C++. Por ejemplo, el código siguiente:

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

Se debe cambiar a:

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

Para las macros de mapa, agregue el carácter "&" y . No debe volver a agregar el carácter en el código.

_ATL_FREE_THREADED

Defina si uno o varios de los objetos usan subprocesos libres o neutros.

_ATL_FREE_THREADED

Comentarios

Especifica el subproceso libre. El subprocesamiento libre es equivalente a un modelo de apartamento multiproceso. Consulte Especificar el modelo de subprocesos del proyecto para otras opciones de subproceso y Opciones, Asistente para objetos simples ATL para obtener una descripción de los modelos de subprocesos disponibles para un objeto ATL.

_ATL_MODULES

Permite compilar proyectos ATL con permissive- y usar ATL con módulos de C++.

_ATL_MODULES

_ATL_MULTI_THREADED

Símbolo que indica que el proyecto tiene objetos marcados como Ambos, Libres o Neutros.

_ATL_MULTI_THREADED

Comentarios

Si se define este símbolo, ATL extrae código que sincronizará correctamente el acceso a los datos globales. En su lugar, el nuevo código debe usar la macro _ATL_FREE_THREADED equivalente.

_ATL_NO_AUTOMATIC_NAMESPACE

Símbolo que impide el uso predeterminado del espacio en nombres como ATL.

_ATL_NO_AUTOMATIC_NAMESPACE

Comentarios

Si este símbolo no está definido, incluido atlbase.h el using namespace ATL rendimiento de forma predeterminada, lo que puede provocar conflictos de nomenclatura. Para impedir esto, defina este símbolo.

_ATL_NO_COM_SUPPORT

Símbolo que impide que el código relacionado con COM se compile con el proyecto.

_ATL_NO_COM_SUPPORT

ATL_NO_VTABLE

Símbolo que impide que el puntero de la vtable se inicialice en el constructor y destructor de la clase.

ATL_NO_VTABLE

Comentarios

Si se impide que el puntero de la vtable se inicialice en el constructor y el destructor de la clase, el enlazador puede eliminar la vtable y todas las funciones a las que apunta. Se expande a __declspec(novtable).

Ejemplo

class ATL_NO_VTABLE CMyClass2 :

ATL_NOINLINE

Símbolo que indica que una función no debe insertarse.

    ATL_NOINLINE inline
    myfunction()
    {
    ...
    }

Parámetros

myfunction
Función que no se debe insertar.

Comentarios

Use este símbolo si desea asegurarse de que el compilador no inserte una función, aunque se deba declarar como insertada para que se pueda colocar en un archivo de encabezado. Se expande a __declspec(noinline).

_ATL_SINGLE_THREADED

Defina si todos los objetos usan el modelo de subprocesos único

_ATL_SINGLE_THREADED

Comentarios

Especifica que el objeto siempre se ejecuta en el subproceso COM principal. Consulte Especificar el modelo de subprocesos del proyecto para otras opciones de subproceso y Opciones, Asistente para objetos simples ATL para obtener una descripción de los modelos de subprocesos disponibles para un objeto ATL.

Consulte también

Macros