コンピュータプログラミングにおいて、ディレクティブまたはプラグマ(「実用的な」に由来)とは、コンパイラ(またはその他の翻訳器)が入力をどのように処理するかを指定する言語構成要素です。プログラミング言語によっては、ディレクティブが言語の文法の一部である場合とそうでない場合があり、コンパイラごとに異なる場合があります。ディレクティブは、プリプロセッサによって処理されてコンパイラの動作を指定することも、インバンドパラメータ化の一形態として機能することもできます。
ディレクティブは、グローバルな動作を指定する場合もあれば、プログラミングコードのブロックなど、ローカルなセクションのみに影響を与える場合もあります。C言語プログラムなど、ディレクティブがオプションのコンパイラヒントであり、無視できる場合もありますが、通常は指示的なものであり、従わなければなりません。ただし、ディレクティブは言語自体に何らかの動作を実行するのではなく、コンパイラの動作を変更するだけです。
この用語は、開発環境に存在する既存のコンパイラ、アセンブラ、および言語構造を拡張する追加の実行可能処理をもたらす、コードに埋め込まれた独自のサードパーティタグおよびコマンド(またはマークアップ)を指すために使用されることがあります。「ディレクティブ」という用語は、「コマンド」という用語と同様に、さまざまな方法で使用されます。
CおよびC++では、シンプルなマクロプリプロセッサが言語でサポートされています。プリプロセッサによって処理されるべきソース行(例: や#define)は、プリプロセッサディレクティブ#includeと呼ばれます。
C言語のプリプロセッサディレクティブに似た構文構造、例えばC#の`<script>`など#ifも、通常は「ディレクティブ」と呼ばれますが、これらの場合、実際の前処理フェーズは含まれない場合があります。
条件ディレクティブの後に続く場合を除きdefined、すべてのプリプロセッサコマンドはハッシュ記号(#)で始まります。C ++26までは、キーワードexport、importおよびはmoduleプリプロセッサによって部分的に処理されていました。[ 1 ]
COBOLにはCOPYディレクティブがあります。
ALGOL 68では 、ディレクティブはプラグマット(「pragmatic」から)と呼ばれ、pragmatまたはprと表記されます。C などの新しい言語では、これは「pragma」(「t」なし)と略されます。
ALGOL 68 におけるプラグマトの一般的な用途は、ストロッピングレジーム、つまり「キーワードの表示方法」を指定することです。以下に、POINT、UPPER、RES (予約語)、または引用符レジームを指定するさまざまなディレクティブを示します。POINTレジームまたは引用符レジームのいずれにおいても、プラグマトキーワード自体 ( prと略記) にストロッピングが使用されている点に注意してください。
。PRポイント.PR . PRアッパー.PR 。PR RES.PR 「pr」引用「pr」 現在、ディレクティブは1970年代初頭に登場し、現在のC99規格にも引き継がれているC言語で最もよく知られています。C言語では、ディレクティブはCプリプロセッサへの命令、またはコンパイラ自体へのディレクティブとして使用され#pragmaます。また、より現代的な言語でもある程度使用されています(下記参照)。
declare構文 (またはproclaim)を使用して指定されますdeclaim。[ 3 ] 1 つの例外を除いて、宣言はオプションであり、プログラムのセマンティクスには影響しません。唯一の例外は でありspecial、これは適切な場所で指定する必要があります。#include "file"ディレクティブに相当するのは、重要なコメントです{$I "file"}。useのディレクティブを指定するためにも使用できます。use strict;use utf8;{-# INLINE foo #-}。例: [ 4 ]また、Haskell では、C プリプロセッサを使用することもできます{-# LANGUAGE CPP #-}。declare(strict_types=1)。%) で終わります。;例: 、%INCLUDE foo;%NOPRINT;%PAGE;%POP;%SKIP;from __future__ import featureで定義)で、Perlと同様に既存のモジュールインポート構文を使用します。もう1つはソースコードファイルのエンコーディングを指定するディレクティブ(コメント内)(PEP 263 -- Defining Python Source Code Encodingsで定義)です。より一般的なディレクティブステートメントがPEP 244 -- The `directive' statementで提案されましたが、却下されました。これらはすべて2001年に遡ります。codinguseとして宣言される点が異なります。"use strict";"use asm";Optionディレクティブには キーワード " " が使用されます。Option Explicit On|Off- 有効にすると、変数の初回使用時の暗黙的な宣言が禁止され、事前に明示的な宣言が必要になります。Option Compare Binary- 文字列の比較結果は、文字の内部バイナリ表現から派生したソート順に基づきます。たとえば、英語/ヨーロッパ言語コードページ (ANSI 1252) の場合、A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø となります。組み込み演算子 (例: =、<>、<、>)、Select Case ブロック、および VBランタイム ライブラリの文字列関数 (例: InStr) に影響します。Option Compare Text- 文字列の比較結果は、システムのロケールによって決定される大文字小文字を区別しないテキストのソート順に基づきます。たとえば、英語/ヨーロッパ言語コードページ (ANSI 1252) の場合、(A=a) < (À = à) < (B=b) < (E=e) < (Ê = ê) < (Z=z) < (Ø = ø) となります。組み込み演算子 (例: =、<>、<、>)、Select Case ブロック、および VB ランタイム ライブラリの文字列関数 (例: InStr) に影響します。Option Strict On|Off- 許可しない場合: Option Infer On|Off- 有効にすると、コンパイラは初期化子からローカル変数の型を推論できるようになります。key: value。たとえば、 は、coding: UTF-8ファイルがUTF-8文字エンコーディングでエンコードされていることを示します。#pragmaコンパイラの警告やデバッガのチェックサムを制御するために特に使用されるディレクティブが含まれます。[ 5 ] [ 6 ] C# には、C や C++ では使用されないディレクティブもいくつかあります。これには、#nullableやが含まれます#region。C# では関数のようなマクロは許可されていませんが、条件付きコンパイルなどの目的で通常のマクロは許可されています。.END、アセンブラにコードのアセンブリを停止するように指示する場合があります。/SQLには、次の構文を持つPRAGMAキーワードがあります。PRAGMA instruction_to_compiler ; [...] PL/SQLにはいくつかのプラグマがあります [...]