#pragma

De cppreference.com
Saltar a: navegación, buscar


    #pragma lexemas

El comando del preprocesador #pragma permite al programador entregar un comando al compilador que éste podrá ejecutar para realizar ciertas tareas. Dado que las capacidades de #pragma de cada compilador son específicas y definidas por su implementación, el uso de etiquetas #pragma cambia de un compilador a otro. Un ejemplo común sería rastrear la ejecución de un programa o modificar ciertas opciones en la compilación.

Algunos compiladores como GNU GCC desaconsejan el uso de instrucciones #pragma, recomendando el uso de funcionalidades específicas en su lugar como declaraciones de atributos de funciones o archivos de recursos.

A continuación se enumeran algunos compiladores, junto con las capacidades de #pragma que soportan.

Contenido

[editar] Usos Generales

Diversos compiladores utilizan las siguientes instrucciones:

[editar] message

Sintaxis:

  1. pragma message (Mensaje)

</syntaxhighlight>

Esta directiva imprime en la consola de compilación un mensaje informacional; este mensaje no resulta ni en un error de compilación ni en una advertencia. Puede usarse, por ejemplo, para dar aviso al momento de agregar cierta cabecera que ésta requiere la activación de alguna directiva especial del compilador.

Ejemplos: <code c>

  1. pragma message( "Compiling " __FILE__ )
  1. if !defined __cplusplus
  2. pragma message( "Toma nota, deberias estar compilando este programa con C++.")
  3. endif

</syntaxhighlight>

[editar] pack

Sintaxis: <code c>

  1. pragma pack(n) donde n es una potencia de 2, o 0, o no esta presente

</syntaxhighlight>

#pragma pack activa o desactiva una directiva de "empaquetamiento" de datos. El empaquetamiento es un metodo de optimización que alinea los miembros de las estructuras, uniones o variables miembro, en función de una cantidad de bytes conocida como el "marco de empaquetado" o boundary. Esto hace mas expedito, y por tanto mas rápido, el acceso a la información una vez que esta esta en memoria ya que las variables estan alineadas a posiciones con las que el procesador este acostumbrado a trabajar.

El numero n entre parentesis indica el tamaño, en bytes, del marco de empaquetado. Puede ser una potencia de 2 hasta el tamaño en bytes que soporte la maquina (ej.: 1, 2, 4, 8, 16, 32, ...) o cero (0) en cuyo caso se deshabilita.

Ejemplo: <code c>

  1. pragma pack(2)

definición de alguna estructura o unión que requiere sus miembros alineados dentro de marcos de 2*8 = 16 bits

  1. pragma pack()

en este punto la optimización de empaquetado vuelve a su estado normal </syntaxhighlight>

[editar] weak

Sintaxis:

#pragma weak nombre_de_simbolo

Esta directiva impone un "nombre débil" o sinónimo para un símbolo que es almacenado en el fichero objeto resultante. Un fichero objeto diferente (por ejemplo, un programa que incluye el primer fichero objeto como una librería) puede invocar a este símbolo aunque no lo haya definido previamente, sin que se produzca un error de compilación.

  1. ---


A continuación siguen directivas para compiladores específicos.


[editar] GCC -- GNU/Linux, BSD, Mac OS X, Windows (MinGW), etc

[editar] redefine_extname

Sintaxis: <code c>

  1. pragma redefine_extname printf prnt

</syntaxhighlight> Esta directiva permite establecer un nuevo nombre, como prnt, para una función una vez traducido el nombre a lenguahe ensamblador.

[editar] extern_prefix

Sintaxis: <code c>

  1. pragma extern_prefix ext_ prefijar funciones externas con "ext_"

definición de varias funciones externas

  1. pragma extern_prefix terminar la tarea de prefijación

</syntaxhighlight> Esta directiva antepone un prefijo especial como ext_ a las declaraciones de símbolos externos que encuentre en su camino, hasta encontrarse con otra directiva extern_prefix.

[editar] Microsoft Visual C++

[editar] once

Sintaxis: <code c>

  1. pragma once

</syntaxhighlight> Esta directiva se asegura que el archivo cabecera en el que está ubicado se incluye una sola vez. Su efecto es exactamente igual al de un clásico centinela de cabecera:

<code c> identificador.h

  1. ifndef IDENTIFICADOR_H_
  2. define IDENTIFICADOR_H_

... definiciones del archivo de cabecera

  1. endif

</syntaxhighlight>

[editar] Borland C++

[editar] ident

Sintaxis: <code c>

  1. pragma ident cadena_de_texto

</syntaxhighlight> Esta directiva coloca cadena_de_texto dentro de la seccion de comentarios (".comment") de un archivo objeto.

Herramientas personales
Espacios de nombres
Variantes
Acciones
Navegación
Herramientas