Jump to content

Директива (программирование)

(Перенаправлено с Pragma (программирование) )

В компьютерном программировании директива компилятор или прагма (от слова «прагматика») — это языковая конструкция , которая определяет, как ( или другой транслятор ) должен обрабатывать вводимые данные. В зависимости от языка программирования директивы могут быть или не быть частью грамматики языка и могут различаться от компилятора к компилятору. Они могут обрабатываться препроцессором для указания поведения компилятора или функционировать как форма внутриполосной параметризации.

В некоторых случаях директивы определяют глобальное поведение, тогда как в других случаях они влияют только на локальный раздел, например блок программного кода. В некоторых случаях, например в некоторых программах на языке C, директивы являются необязательными подсказками компилятора и могут игнорироваться, но обычно они носят предписывающий характер и должны соблюдаться. Однако директива не выполняет никаких действий в самом языке, а лишь изменяет поведение компилятора.

Этот термин может использоваться для обозначения проприетарных сторонних тегов и команд (или разметки), встроенных в код, которые приводят к дополнительной обработке исполняемого файла, расширяющей существующие конструкции компилятора, ассемблера и языка, присутствующие в среде разработки. Термин «директива» также применяется различными способами, похожими на термин «команда» .

Препроцессор C

[ редактировать ]

В C и C++ язык поддерживает простой макросов препроцессор . Исходные строки, которые должны обрабатываться препроцессором, например: #define и #include называются директивами препроцессора .

Другая конструкция C, #pragma Директива используется, чтобы указать компилятору использовать прагматические или зависящие от реализации функции. Двумя известными пользователями этой директивы являются OpenMP и OpenACC .

Синтаксические конструкции, аналогичные директивам препроцессора C, такие как C # #if, также обычно называются «директивами», хотя в этих случаях может не быть никакой реальной фазы предварительной обработки.

Все команды препроцессора начинаются с символа решетки (#), за исключением директив импорта и модуля в C++ . [1]

Директивы датируются JOVIAL . [2]

COBOL Имел директиву COPY.

В АЛГОЛе 68 директивы известны как прагматы (от «прагматический») и обозначаются прагматами или pr ; в новых языках, особенно в 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). [3] За одним исключением, объявления не являются обязательными и не влияют на семантику программы. Единственным исключением является special, который необходимо указать там, где это необходимо.
  • В Turbo Pascal директивы называются значимыми комментариями языка , поскольку в грамматике они следуют тому же синтаксису, что и комментарии . В Turbo Pascal важным комментарием является комментарий, первый символ которого — знак доллара , а второй символ — буква; например, эквивалент C #include "file" директива является важным комментарием {$I "file"}.
  • В Perl ключевое слово " use", который импортирует модули, также можно использовать для указания директив, таких как use strict; или use utf8;.
  • Прагмы Haskell указываются с использованием специального синтаксиса комментариев, например {-# INLINE foo #-}. [4]
  • PHP использует директиву declare(strict_types=1).
  • В Python есть две директивы – from __future__ import feature (определено в PEP 236 — Назад в __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, которая специально используется для управления предупреждениями компилятора и контрольными суммами отладчика. [5] [6]
  • SQLite В состав СУБД входит директива PRAGMA, которая используется для введения команд, несовместимых с другими СУБД. [7]
  • В Solidity директивы компилятора называются прагмами и задаются с помощью ключевого слова `pragma`. [8]

Язык ассемблера

[ редактировать ]
  • На языке ассемблера директивы, также называемые псевдооперациями или «псевдооперациями», обычно определяют такую ​​информацию, как целевая машина, отмечают разделение между разделами кода, определяют и изменяют переменные времени сборки, определяют макросы, обозначают условные и повторяющиеся операции. код, определение зарезервированных областей памяти и т. д. Некоторые, но не все, ассемблеры используют особый синтаксис, чтобы отличать псевдооперации от мнемоники инструкций, например, предваряя псевдооперацию точкой, например псевдооперацию. .END, что может заставить ассемблер прекратить сборку кода.

См. также

[ редактировать ]
  • #pragma Once — директива препроцессора в C и C++.
  1. ^ «P1857R1 — Обнаружение зависимостей модулей» .
  2. ^ «Глава 17 – Директивы» (PDF) . Руководство по компьютерному программированию для языка JOVIAL (J73) (PDF) (Технический отчет). Июнь 1981. стр. 243–263. RADC-TR-81-143 . Проверено 28 мая 2023 г.
  3. ^ Стил 1990 , Глава 9: Декларации , с. 215–237.
  4. ^ «7.20. Прагмы» . GHC 7.8.3 Документация . Проверено 18 июля 2014 г.
  5. ^ дотнет-бот. «Лексическая структура — спецификация языка C#» . docs.microsoft.com . Проверено 1 ноября 2019 г.
  6. ^ БиллВагнер. «#pragma — Справочник по C#» . docs.microsoft.com . Проверено 1 ноября 2019 г.
  7. ^ «Операторы Pragma, поддерживаемые SQLite» . www.sqlite.org .
  8. ^ «Макет исходного файла Solidity — документация Solidity 0.8.27» . docs.soliditylang.org . Проверено 3 июня 2024 г.
  9. ^ Фейерштейн, Стивен ; Прибыл, Билл (23 января 2014 г.). Программирование Oracle PL/SQL (6-е изд.). O'Reilly Media, Inc. (опубликовано в 2014 г.). ISBN  9781449324414 . Проверено 16 июня 2016 г. В PL/SQL есть ключевое слово PRAGMA со следующим синтаксисом: PRAGMA Instruction_to_compiler ; [...] PL/SQL предлагает несколько прагм [...]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: f89f2f6c7ee4126694581d1a16fcaa40__1717407480
URL1:https://arc.ask3.ru/arc/aa/f8/40/f89f2f6c7ee4126694581d1a16fcaa40.html
Заголовок, (Title) документа по адресу, URL1:
Directive (programming) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)