En programación de computadoras , una directiva o pragma (de "pragmático") es una construcción del lenguaje que especifica cómo un compilador (u otro traductor ) debe procesar su entrada. Dependiendo del lenguaje de programación , las directivas pueden o no ser parte de la gramática del lenguaje y pueden variar de un compilador a otro. Pueden ser procesados por un preprocesador para especificar el comportamiento del compilador o funcionar como una forma de parametrización dentro de banda.
En algunos casos, las directivas especifican un comportamiento global, mientras que en otros casos sólo afectan a una sección local, como un bloque de código de programación. En algunos casos, como algunos programas en C, las directivas son sugerencias opcionales del compilador y pueden ignorarse, pero normalmente son prescriptivas y deben seguirse. Sin embargo, una directiva no realiza ninguna acción en el lenguaje en sí, sino sólo un cambio en el comportamiento del compilador.
Este término podría usarse para referirse a etiquetas y comandos (o marcado) patentados de terceros incrustados en el código que dan como resultado un procesamiento ejecutable adicional que amplía las construcciones de lenguaje, ensamblador y compilador existentes presentes en el entorno de desarrollo. El término "directiva" también se aplica de diversas formas que son similares al término comando .
En C y C++ , el lenguaje admite un preprocesador de macros simple . Las líneas fuente que debe manejar el preprocesador, como y, se denominan directivas de preprocesador .#define
#include
Otra construcción de C, la #pragma
directiva, se utiliza para indicar al compilador que utilice características pragmáticas o dependientes de la implementación. Dos usuarios notables de esta directiva son OpenMP y OpenACC .
Las construcciones sintácticas similares a las directivas de preprocesador de C, como las de C##if
, también suelen denominarse "directivas", aunque en estos casos puede que no haya ninguna fase de preprocesamiento real involucrada.
Todos los comandos del preprocesador comienzan con un símbolo de almohadilla (#) con la excepción de las directivas import y module en C++ . [1]
Directivas datan de JOVIAL . [2]
COBOL Tenía una directiva COPY.
En ALGOL 68 , las directivas se conocen como pragmats (de "pragmático"), y se denotan pragmat o pr ; en lenguajes más nuevos, especialmente C, esto se ha abreviado como "pragma" (sin 't').
Un uso común de pragmáticos en ALGOL 68 es especificar un régimen de limitación , es decir, "cómo se indican las palabras clave". A continuación siguen varias directivas de este tipo, que especifican los regímenes PUNTO, SUPERIOR, RES (reservado) o cotización. Tenga en cuenta el uso de la palabra clave pragmat (abreviada pr ), ya sea en el régimen de PUNTOS o de comillas:
.PR PUNTO .PR.PR SUPERIOR .PR.PR RES .PR'pr' cita 'pr'
Hoy en día, las directivas son más conocidas en el lenguaje C, de principios de la década de 1970, y continúan hasta el actual estándar C99 , donde son instrucciones para el preprocesador de C o, en forma de #pragma
directivas para el compilador mismo. También se utilizan hasta cierto punto en idiomas más modernos; vea abajo.
declare
construcción (también proclaim
o declaim
). [3] Con una excepción, las declaraciones son opcionales y no afectan la semántica del programa. La única excepción es special
, que debe especificarse cuando corresponda.#include "file"
es el comentario significativo {$I "file"}
.use
", que importa módulos, también se puede utilizar para especificar directivas, como use strict;
o use utf8;
.{-# INLINE foo #-}
. [4]declare(strict_types=1)
.from __future__ import feature
definidas en PEP 236 - Regreso al __futuro__), que cambia las características del lenguaje (y usa la sintaxis de importación del módulo existente, como en Perl), y la coding
directiva (en un comentario) para especificar la codificación de un archivo de código fuente (definido en PEP 263 - Definición de codificaciones de código fuente de Python). Una declaración directiva más general fue propuesta y rechazada en PEP 244 – La declaración "directiva"; Todos ellos datan de 2001.use
sintaxis de las directivas, con la diferencia de que los pragmas se declaran como cadenas literales (por ejemplo "use strict";
, o "use asm";
), en lugar de una llamada a función.Option
" se utiliza para directivas:Option Explicit On|Off
- Cuando está activado no permite la declaración implícita de variables en el primer uso que requieren una declaración explícita de antemano.Option Compare Binary
- Resultados en comparaciones de cadenas basadas en un orden de clasificación derivado de las representaciones binarias internas de los caracteres, por ejemplo, para la página de códigos inglesa/europea (ANSI 1252) A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø. Afecta a los operadores intrínsecos (p. ej., =, <>, <, >), al bloque Seleccionar caso y a las funciones de cadena de la biblioteca en tiempo de ejecución de VB (p. ej., InStr).Option Compare Text
- Resultados en comparaciones de cadenas basadas en un orden de clasificación de texto que no distingue entre mayúsculas y minúsculas determinado por la configuración regional de su sistema, por ejemplo, para la página de códigos inglés/europeo (ANSI 1252) (A=a) < (À = à) < (B=b) < (E=e) < (Ê = ê) < (Z=z) < (Ø = ø). Afecta a los operadores intrínsecos (p. ej., =, <>, <, >), al bloque Seleccionar caso y a las funciones de cadena de la biblioteca en tiempo de ejecución de VB (p. ej., InStr).Option Strict On|Off
- Cuando no está permitido:Option Infer On|Off
- Cuando está activado, permite al compilador inferir el tipo de variables locales a partir de sus inicializadores.key: value
notación. Por ejemplo, coding: UTF-8
indica que el archivo está codificado mediante la codificación de caracteres UTF-8 ..END
, que podría indicarle al ensamblador que deje de ensamblar código.PL/SQL tiene una palabra clave PRAGMA con la siguiente sintaxis: PRAGMA instrucción_a_compiler ; [...] PL/SQL ofrece varios pragmas [...]