Директива (программирование) - Directive (programming)
В компьютерном программировании , в директиве или прагма (от «прагматичный») является языковой конструкцией , которая определяет , как компилятор (или другой переводчик ) должен обрабатывать входные данные . Директивы не являются частью грамматики языка программирования и могут отличаться от компилятора к компилятору. Они могут обрабатываться препроцессором для определения поведения компилятора или функционировать как форма внутриполосной параметризации.
В некоторых случаях директивы определяют глобальное поведение, в то время как в других случаях они влияют только на локальный раздел, такой как блок программного кода. В некоторых случаях, например в некоторых программах на C, директивы являются необязательными указаниями компилятора и могут игнорироваться, но обычно они предписывают и должны соблюдаться. Однако директива не выполняет никаких действий на самом языке, а только изменяет поведение компилятора.
Этот термин может использоваться для обозначения проприетарных сторонних тегов и команд (или разметки), встроенных в код, которые приводят к дополнительной исполняемой обработке, расширяющей существующие конструкции компилятора, ассемблера и языка, присутствующие в среде разработки. Термин «директива» также применяется по-разному, аналогично термину команда .
Препроцессор C
В C и C ++ язык поддерживает простой препроцессор макросов . Строки исходного кода, которые должны обрабатываться препроцессором, такие как и , называются директивами препроцессора .
#define
#include
Другая конструкция C, #pragma
директива, используется для указания компилятору использовать прагматические или зависящие от реализации функции. Двумя известными пользователями этой директивы являются OpenMP и OpenACC .
Синтаксические конструкции , аналогичные директивы препроцессора, такие как C # «S #if
, также обычно называют„директива“, хотя в этих случаях не может быть никакой реальной фазой предварительной обработки участия.
Все команды препроцессора начинаются с символа решетки (#).
История
Директивы датируются АЛГОЛОМ 68 , где они известны как прагматики (от «прагматический») и обозначаются как прагмат или пр ; в новых языках, особенно в C, это сокращено до «прагма» (без «т»).
Обычно прагматики в АЛГОЛе 68 используются для определения режима корректировки , означающего, «как указываются ключевые слова». Далее следуют различные такие директивы, определяющие режимы POINT, UPPER, RES (зарезервировано) или котировки. Обратите внимание на использование строчки для самого ключевого слова pragmat (сокращенно pr ) либо в режиме POINT, либо в режиме кавычек:
.PR POINT .PR .PR UPPER .PR .PR RES .PR 'pr' quote 'pr'
Сегодня директивы наиболее известны на языке C, созданном в начале 1970-х годов, и продолжаются в текущем стандарте C99 , где они являются либо инструкциями для препроцессора C , либо, в форме #pragma
, директивами для самого компилятора. Они также в некоторой степени используются в более современных языках; Смотри ниже.
Другие языки
- В Ada директивы компилятора называются прагмами (сокращение от «прагматическая информация»).
- В Common Lisp директивы называются объявлениями и указываются с помощью
declare
конструкции (такжеproclaim
илиdeclaim
). За одним исключением объявления не являются обязательными и не влияют на семантику программы. Единственное исключениеspecial
, которое должно быть указано в соответствующих случаях. - В Turbo Pascal директивы называются важными комментариями , потому что в грамматике языка они следуют тому же синтаксису, что и комментарии . В Turbo Pascal значимый комментарий - это комментарий, первый символ которого - знак доллара, а второй символ - буква; например, эквивалентом
#include "file"
директивы C является важный комментарий{$I "file"}
. - В Perl , на ключевое слово «
use
», который импортирует модули, также могут быть использованы для указания директивы, такие какuse strict;
илиuse utf8;
. -
Прагмы Haskell указываются с использованием специального синтаксиса комментариев, например
{-# INLINE foo #-}
. -
Python имеет две директивы -
from __future__ import feature
(определенные в PEP 236 - Back to the __future__ ), которые изменяют языковые функции (и используют существующий синтаксис импорта модуля, как в Perl), иcoding
директива (в комментарии) для указания кодировки файл исходного кода (определенный в PEP 263 - Определение кодировок исходного кода Python ). В PEP 244 было предложено и отклонено более общее директивное заявление - "директивное" заявление ; все это датируется 2001 годом. -
ECMAScript также использует
use
синтаксис для директив с той разницей, что прагмы объявляются как строковые литералы (например"use strict";
, или"use asm";
), а не как вызов функции. - В Visual Basic ключевое слово "
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
- Когда включено:- Бестиповое программирование - где объявления без явного типа неявно типизируются как Object.
- позднее связывание (т. е. динамическая отправка к объектам CLR, DLR и COM) для значений, статически типизированных как Object.
- неявные сужающие преобразования - требование, чтобы все преобразования в более узкие типы (например, из Long в Integer, Object в String, Control в TextBox) были явными в коде с использованием операторов преобразования (например, CInt, DirectCast, CType).
-
Option Infer On|Off
- Когда включено, позволяет компилятору определять тип локальных переменных из их инициализаторов.
-
- В Ruby директивы интерпретатора называются прагмами и задаются комментариями в начале файла, которые следуют за
key: value
нотацией. Например,coding: UTF-8
указывает, что файл закодирован с помощью кодировки символов UTF-8 . - В C # директивы компилятора называются директивами предварительной обработки. Существует ряд различных директив компилятора, включая #pragma, которая специально используется для управления предупреждениями компилятора и контрольными суммами отладчика.
- SQLite СУБД включает в себя директиву PRAGMA, которая используется для введения команд, которые не совместимы с другими СУБД.
язык ассемблера
- На языке ассемблера директивы, также называемые псевдооперациями или «псевдооперациями», обычно определяют такую информацию, как целевая машина, отмечают разделение между частями кода, вызывают макросы, определяют зарезервированные области памяти и так далее. Ассемблеры используют особый синтаксис, чтобы отличать псевдооперации от мнемоники инструкций, например, ставя перед псевдооперацией точку, такую как псевдооперация
.END
, которая может заставить ассемблер прекратить сборку кода.
PL / SQL
- Корпорация Oracle «s PL / SQL процедурный язык включает в себя набор директив компилятора, известных как„прагмах“.
Смотрите также
- #pragma once - Директива препроцессора в C и C ++
Рекомендации
- Стил, Гай Л. (1990). Common Lisp - язык . Цифровая пресса. С. 215–237. ISBN 1-55558-041-6 .