Directivas de pragma y la palabra clave de __Pragma

Las directivas pragma especifican las características del compilador de específicos operativo o equipo.El __pragma (palabra clave), que es específico para el compilador de Microsoft, permite a las directivas pragma de código dentro de las definiciones de macro.

#pragma token-string
__pragma(token-string)

Comentarios

Cada aplicación de c y C++ es compatible con algunas características exclusivas de su equipo host o del sistema operativo.Por ejemplo, algunos programas, deben ejercer un control preciso sobre las áreas de memoria donde se coloca los datos o para controlar el modo determinado funciones reciben parámetros.El #pragma directivas ofrecen una forma para que cada compilador ofrecen características de la específica de la máquina y el sistema operativo mientras se mantiene una compatibilidad total con los lenguajes c y C++.

Directivas pragma son específicos máquina o del sistema operativo por definición y suelen ser difieren para cada compilador.Directivas pragma pueden utilizarse en instrucciones condicionales, para ofrecer otra funcionalidad de preprocesador, o para proporcionar información definida por la aplicación para el compilador.

El token-string es una serie de caracteres que le da una instrucción específica del compilador y los argumentos, si la hay.El signo de número (#) debe ser el primer carácter no sea un espacio en blanco en la línea que contiene el pragma; caracteres de espacio en blanco pueden separar el signo de número y la palabra "pragma".Después de #pragma, escribir cualquier texto que el traductor puede analizar como símbolos (tokens) de preprocesamiento.El argumento de #pragma está sujeto a la expansión de la macro.

Si el compilador encuentra un pragma no reconoce, emite una advertencia y continúa la compilación.

Los compiladores de Microsoft C y C++ reconocen las siguientes directivas pragma:

alloc_text

auto_inline

bss_seg

check_stack

code_seg

comment

component

conform1

const_seg

data_seg

deprecated

detect_mismatch

fenv_access

float_control

fp_contract

función

hdrstop

include_alias

init_seg1

inline_depth

inline_recursion

intrinsic

loop1

make_public

administrado

mensaje

omp

una vez

optimize

pack

pointers_to_members1

pop_macro

push_macro

region, endregion

runtime_checks

sección

setlocale

strict_gs_check

no administrado

vtordisp1

advertencia

1.Compatible sólo con el compilador de C++.

Directivas pragma y las opciones del compilador

Algunos pragmas proporcionan la misma funcionalidad que las opciones del compilador.Cuando un pragma se encuentra en el código fuente, reemplaza el comportamiento especificado por la opción del compilador.Por ejemplo, si ha especificado /Zp8, puede reemplazar esta configuración de compilador en secciones concretas del código con pack:

cl /Zp8 ...

<file> - packing is 8
// ...
#pragma pack(push, 1) - packing is now 1
// ...
#pragma pack(pop) - packing is 8
</file>

La palabra clave de __pragma()

Específico de Microsoft

El compilador también admite la __pragma palabra clave, que tiene la misma funcionalidad como la #pragma directiva, pero puede ser utilizado en línea en una definición de macro.El #pragma no se puede utilizar la directiva en una definición de macro, porque el compilador interpreta el carácter de signo de número ('#') en la directiva del operador de generación de cadenas (#).

En el ejemplo de código siguiente se muestra cómo el __pragma palabra clave se puede utilizar en una macro.Este código es un extracto de la cabecera de mfcdual.h en el ejemplo ACDUAL en "Ejemplos de compatibilidad con COM del compilador":

#define CATCH_ALL_DUAL \
CATCH(COleException, e) \
{ \
_hr = e->m_sc; \
} \
AND_CATCH_ALL(e) \
{ \
__pragma(warning(push)) \
__pragma(warning(disable:6246)) /*disable _ctlState prefast warning*/ \
AFX_MANAGE_STATE(pThis->m_pModuleState); \
__pragma(warning(pop)) \
_hr = DualHandleException(_riidSource, e); \
} \
END_CATCH_ALL \
return _hr; \

Finalizar específicos de Microsoft

Vea también

Referencia

Pragmas de C

Palabras clave de C++

Otros recursos

Referencia del preprocesador de C/C++