En programación informática , 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 procesadas por un preprocesador para especificar el comportamiento del compilador o funcionar como una forma de parametrización en banda.
En algunos casos, las directivas especifican un comportamiento global, mientras que en otros casos solo afectan a una sección local, como un bloque de código de programación. En algunos casos, como en 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 solo un cambio en el comportamiento del compilador.
Este término se puede utilizar para referirse a etiquetas y comandos (o marcado) de terceros patentados e integrados en el código que dan como resultado un procesamiento ejecutable adicional que amplía las construcciones de compilador, ensamblador y lenguaje existentes en el entorno de desarrollo. El término "directiva" también se aplica de diversas maneras que son similares al término comando .
En C y C++ , el lenguaje admite un preprocesador de macros simple . Las líneas de código fuente que debe manejar el preprocesador, como y, se denominan directivas de preprocesador .#define
#include
Las construcciones sintácticas similares a las directivas de preprocesador de C, como por ejemplo 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 numeral (#) con la excepción de las directivas de importación y módulo en C++ . [1]
Las directivas datan de JOVIAL . [2]
COBOL tenía una directiva COPY.
En ALGOL 68 , las directivas se conocen como pragmats (de "pragmatic"), 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 los pragmats en ALGOL 68 es especificar un régimen de stropping , es decir, "cómo se indican las palabras clave". A continuación se presentan varias directivas de este tipo, que especifican los regímenes POINT, UPPER, RES (reservado) o de comillas. Observe el uso de stropping para la palabra clave pragmat en sí (abreviada pr ), ya sea en los regímenes POINT o de comillas:
PUNTO .PR.PR SUPERIOR .PR.PR RES.PRcita 'pr'
En la actualidad, las directivas son más conocidas en el lenguaje C, de principios de la década de 1970, y continuaron hasta el estándar actual C99 , donde son instrucciones para el preprocesador de C o, en forma de #pragma
, directivas para el compilador mismo. También se utilizan en cierta medida en lenguajes más modernos; consulte a continuación.
declare
constructor (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"
la directiva de C 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 -- Back to the __future__), que cambia las características del lenguaje (y utiliza la sintaxis de importación de módulos existente, como en Perl), y la coding
directiva (en un comentario) para especificar la codificación de un archivo de código fuente (definida en PEP 263 -- Defining Python Source Code Encodings). Se propuso y rechazó una declaración directiva más general en PEP 244 -- La declaración `directive'; todas estas datan de 2001.use
sintaxis de las directivas, con la diferencia de que los pragmas se declaran como literales de cadena (por ejemplo "use strict";
, , o "use asm";
), en lugar de una llamada de función.Option
" se utiliza para directivas:Option Explicit On|Off
- Cuando está activado, no se permite la declaración implícita de variables en el primer uso y se requiere 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 (por ejemplo, =, <>, <, >), al bloque Select Case y a las funciones de cadena de la biblioteca de tiempo de ejecución de VB (por ejemplo, InStr).Option Compare Text
- Los resultados en comparaciones de cadenas se basan 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 inglesa/europea (ANSI 1252) (A=a) < (À = à) < (B=b) < (E=e) < (Ê = ê) < (Z=z) < (Ø = ø). Afecta a los operadores intrínsecos (por ejemplo, =, <>, <, >), al bloque Seleccionar caso y a las funciones de cadena de la biblioteca de tiempo de ejecución de VB (por ejemplo, InStr).Option Strict On|Off
- Cuando está activado no permite: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 indicar al ensamblador que deje de ensamblar código.PL/SQL tiene una palabra clave PRAGMA con la siguiente sintaxis: PRAGMA instruction_to_compiler ; [...] PL/SQL ofrece varios pragmas [...]