Директива (программирование) - 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 ++

Рекомендации

внешняя ссылка