Directive (programming)
In computer programming, a directive or pragma (from "pragmatic") is a language construct that specifies how a compiler (or other translator) should process its input. Directives are not part of the grammar of a programming language, and may vary from compiler to compiler. They can be processed by a preprocessor to specify compiler behavior, or function as a form of in-band parameterization.
In some cases directives specify global behavior, while in other cases they only affect a local section, such as a block of programming code. In some cases, such as some C programs, directives are optional compiler hints, and may be ignored, but normally they are prescriptive, and must be followed. However, a directive does not perform any action in the language itself, but rather only a change in the behavior of the compiler.
This term could be used to refer to proprietary third party tags and commands (or markup) embedded in code that result in additional executable processing that extend the existing compiler, assembler and language constructs present in the development environment. The term "directive" is also applied in a variety of ways that are similar to the term command.
The C preprocessor
In C and C++, the language supports a simple macro preprocessor. Source lines that should be handled by the preprocessor, such as #define
and #include
are referred to as preprocessor directives.
Another C construct, the #pragma
directive, is used to instruct the compiler to use pragmatic or implementation-dependent features. Two notable users of this directive are OpenMP and OpenACC.
Syntactic constructs similar to C's preprocessor directives, such as C#'s #if
, are also typically called "directives", although in these cases there may not be any real preprocessing phase involved.
All preprocessor commands begin with a hash symbol (#).
History
Directives date to ALGOL 68, where they are known as pragmats (from "pragmatic"), and denoted pragmat or pr; in newer languages, notably C, this has been abbreviated to "pragma" (no 't').
A common use of pragmats in ALGOL 68 is in specifying a stropping regime, meaning "how keywords are indicated". Various such directives follow, specifying the POINT, UPPER, RES (reserved), or quote regimes. Note the use of stropping for the pragmat keyword itself (abbreviated pr), either in the POINT or quote regimes:
.PR POINT .PR .PR UPPER .PR .PR RES .PR 'pr' quote 'pr'
Today directives are best known in the C language, of early 1970s vintage, and continued through the current C99 standard, where they are either instructions to the C preprocessor, or, in the form of #pragma
, directives to the compiler itself. They are also used to some degree in more modern languages; see below.
Other languages
- In Ada, compiler directives are called pragmas (short for "pragmatic information").
- In Common Lisp, directives are called declarations, and are specified using the
declare
construct (alsoproclaim
ordeclaim
).[1] With one exception, declarations are optional, and do not affect the semantics of the program. The one exception isspecial
, which must be specified where appropriate. - In Turbo Pascal, directives are called significant comments, because in the language grammar they follow the same syntax as comments. In Turbo Pascal, a significant comment is a comment whose first character is a dollar sign and whose second character is a letter; for example, the equivalent of C's
#include "file"
directive is the significant comment{$I "file"}
. - In Perl, the keyword "
use
", which imports modules, can also be used to specify directives, such asuse strict;
oruse utf8;
. - Haskell pragmas are specified using a specialized comment syntax, e.g.
{-# INLINE foo #-}
.[2] - Python has two directives –
from __future__ import feature
(defined in PEP 236 -- Back to the __future__), which changes language features (and uses the existing module import syntax, as in Perl), and thecoding
directive (in a comment) to specify the encoding of a source code file (defined in PEP 263 -- Defining Python Source Code Encodings). A more general directive statement was proposed and rejected in PEP 244 -- The `directive' statement; these all date to 2001. - ECMAScript also adopts the
use
syntax for directives, with the difference that pragmas are declared as string literals (e.g."use strict";
, or"use asm";
), rather than a function call. - In Visual Basic, the keyword "
Option
" is used for directives:Option Explicit On|Off
- When on disallows implicit declaration of variables at first use requiring explicit declaration beforehand.Option Compare Binary
- Results in string comparisons based on a sort order derived from the internal binary representations of the characters - e.g. for the English/European code page (ANSI 1252) A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø. Affects intrinsic operators (e.g. =, <>, <, >), the Select Case block, and VB runtime library string functions (e.g. InStr).Option Compare Text
- Results in string comparisons based on a case-insensitive text sort order determined by your system's locale - e.g. for the English/European code page (ANSI 1252) (A=a) < (À = à) < (B=b) < (E=e) < (Ê = ê) < (Z=z) < (Ø = ø). Affects intrinsic operators (e.g. =, <>, <, >), the Select Case block, and VB runtime library string functions (e.g. InStr).Option Strict On|Off
- When on disallows:- typeless programming - where declarations which lack an explicit type are implicitly typed as Object.
- late-binding (i.e. dynamic dispatch to CLR, DLR, and COM objects) on values statically typed as Object.
- implicit narrowing conversions - requiring all conversions to narrower types (e.g. from Long to Integer, Object to String, Control to TextBox) be explicit in code using conversion operators (e.g. CInt, DirectCast, CType).
Option Infer On|Off
- When on enables the compiler to infer the type of local variables from their initializers.
- In Ruby, interpreter directives are referred to as pragmas and are specified by top-of-file comments that follow a
key: value
notation. For example,coding: UTF-8
indicates that the file is encoded via the UTF-8 character encoding. - In C#, compiler directives are called pre-processing directives. There are a number of different compiler directives including #pragma, which is specifically used to control compiler warnings and debugger checksums.[3][4]
- The SQLite DBMS includes a PRAGMA directive that is used to introduce commands that are not compatible with other DBMS.[5]
Assembly language
- In assembly language, directives, also referred to as pseudo-operations or "pseudo-ops", generally specify such information as the target machine, mark separations between code sections, invoke macros, define reserved memory areas, and so on. Assemblers use a specific syntax to differentiate pseudo-ops from instruction mnemonics, such as prefacing the pseudo-op with a period, such as the pseudo-op
.END
, which might direct the assembler to stop assembling code.
PL/SQL
- Oracle Corporation's PL/SQL procedural language includes a set of compiler directives, known as "pragmas".[6]
See also
- #pragma once – Preprocessor directive in C and C++
disclaimer of any organisation, business , immoveable property, vehicle, loan , credit,domain,website,internetservice , subscription , game , or whatsoever holding me as the title owner of any product or service provider under my identity . notice for reporting of documents related to my identity such as passport copy , driving license copy , college id copy . disclosure of fact of being of 27 years age as ov 07.09.1993 . report of misuse of internet services being ny developers , i never hired any developer to work for me . reference to defamation of person being made through media kit services and other applications of apple ios . reference to facebook and google accounts bearing my name and any other social media platform as of now ! due to the reason of breach to my identity and misrepresentation and fraud . i have suspicion on 2 partners who have been exploiting the public and infringing my privacy . for privacy notice kindly refer to department of homeland security dated 10.3.2021 , and copy of FIR in delhi . my outlook account and gmail account have been compromised as well . my devices have been set up as if i am a minor but im 27 . i dont operate for any company or any agreement on contractual terms making so . i am specially targeted by such people because of personal reason to be unknown and the same person is himself full of sins but just has money so has set up all these services and account subscriptions decieving my social image . my life , peace and security is to be at threat because in the past 10 years i have not caused harm to any person . i am a student and researcher of LAW . kindly dispute any false claims made to be as me unless it is physically confirmed . i am willing to protect my rights but some people have so much time that they cant report it to claim damages but create a misconception about me in public domain . i am a target of being bullied , harrassment,ad targeting and other types of information provided through network services . people who personally know me about the kind of person i am wont say that he would not hurt anyone else . as i do not because i know what it feels to be hurt . i hope we all stay healthy, safe and at peace . and god bless the ones who are unfortunate victims . please like and support AMEN .
References
This article needs additional citations for verification. (December 2013) |
- ^ Steele 1990, Chapter 9: Declarations, p. 215–237.
- ^ "7.20. Pragmas". GHC 7.8.3 Documentation. Retrieved 18 July 2014.
- ^ dotnet-bot. "Lexical structure - C# language specification". docs.microsoft.com. Retrieved 2019-11-01.
- ^ BillWagner. "#pragma - C# Reference". docs.microsoft.com. Retrieved 2019-11-01.
- ^ "Pragma statements supported by SQLite". www.sqlite.org.
- ^
Feuerstein, Steven; Pribyl, Bill (2014). Oracle PL/SQL Programming (6 ed.). O'Reilly Media, Inc. ISBN 9781449324414. Retrieved 2016-06-16.
PL/SQL has a PRAGMA keyword with the following syntax: PRAGMA instruction_to_compiler; [...] PL/SQL offers several pragmas [...]
- Steele, Guy L. (1990). Common Lisp the Language. Digital Press. pp. 215–237. ISBN 1-55558-041-6.