지시(프로그래밍)
Directive (programming)컴퓨터 프로그래밍에서 명령어 또는 프래그마(pragmatic)는 컴파일러(또는 다른 번역자)가 입력을 처리하는 방법을 지정하는 언어 구조입니다.디렉티브는 프로그래밍 언어의 문법에 포함되지[disputed ] 않으며 컴파일러마다 다를 수 있습니다.이러한 파라미터는 프리프로세서에 의해 처리되어 컴파일러 동작을 지정하거나 대역내 파라미터화의 형태로 기능합니다.
경우에 따라서는 글로벌 동작을 지정하는 경우도 있고 프로그래밍 코드 블록과 같은 로컬섹션에만 영향을 주는 경우도 있습니다.일부 C 프로그램 등 일부 경우 디렉티브는 컴파일러의 옵션 힌트이며 무시될 수 있지만 일반적으로는 규범적이며 따라야 합니다.그러나 명령어는 언어 자체에서 어떠한 작업도 수행하지 않으며 컴파일러 동작의 변경만 수행합니다.
이 용어는 개발 환경에 존재하는 기존 컴파일러, 어셈블러 및 언어 구조를 확장하는 추가 실행 가능 처리로 이어지는 코드에 내장된 자체 서드파티 태그 및 명령어(또는 마크업)를 나타낼 때 사용할 수 있습니다."directive"라는 용어는 명령어와 유사한 다양한 방법으로 사용됩니다.
C 프리프로세서
C 및 C++에서는, 이 언어는 단순한 매크로 프로세서를 서포트하고 있습니다.프리프로세서가 처리할 필요가 있는 송신원회선(예:#define
그리고.#include
는 프리프로세서 디렉티브라고 불립니다.
또 다른 C구축은#pragma
directive는 컴파일러에 실용적인 기능 또는 구현에 의존하는 기능을 사용하도록 지시하기 위해 사용됩니다.이 디렉티브의 주목되는 사용자는 OpenMP와 OpenACC입니다.
구문 구조는 C#의 명령어 등 C의 프리프로세서 지시어와 유사합니다.#if
는 통상 「지시」라고도 불립니다만, 이러한 경우는 실제로 전처리 단계가 필요 없는 경우가 있습니다.
모든 프리프로세서명령어는 해시 기호(#)로 시작합니다.
역사
지시어는 ALGOL 68로 거슬러 올라가며, 여기서 프래그마트("pragmatic")라고 하며, 프래그마트 또는 pr을 나타냅니다.새로운 언어, 특히 C에서는 pragma('t'가 아님)로 축약되어 있습니다.
ALGOL 68에서 프래그마트의 일반적인 용도는 스트로핑 방식을 지정하는 것이며, 이는 "키워드가 어떻게 표시되는지"를 의미한다.POINT, UPER, RES(예약) 또는 견적 체제를 지정하는 다양한 지침이 뒤따릅니다.POINT 또는 따옴표 방식에서 pragmat 키워드 자체에 스트로핑(약어 pr)을 사용하는 것에 주의해 주세요.
.PR POINT.PR . PR UPER 。PR . PR RES 。PR 'pr' 따옴표 'pr'
현재의 디렉티브는 1970년대 초의 빈티지한 C언어로 가장 잘 알려져 있으며, 현재의 C99 표준에도 계속 사용되고 있습니다.이 표준에서는 C 프리프로세서에 대한 명령어 또는 다음 중 하나입니다.#pragma
컴파일러 자체에 대한 지시입니다.그것들은 또한 더 현대적인 언어에서도 어느 정도 익숙합니다. 아래를 참조하십시오.
기타 언어
- Ada에서는 컴파일러 디렉티브를 프래그마라고 부릅니다('프라그마 정보'의 줄임말입니다.
- Common Lisp에서는 디렉티브는 선언이라고 불리며 다음 명령어를 사용하여 지정됩니다.
declare
구성(또한proclaim
또는declaim
단, 선언은 옵션이며 프로그램의 의미에는 영향을 주지 않습니다.[1]단 한 가지 예외는special
적절한 경우 지정해야 합니다. - Turbo Pascal에서 지시어는 의미 있는 주석이라고 불립니다. 왜냐하면 언어 문법에서 지시어는 주석과 같은 구문을 따르기 때문입니다.Turbo Pascal에서 중요한 코멘트는 첫 번째 문자가 달러 기호이고 두 번째 문자가 문자인 코멘트입니다. 예를 들어, C와 동등합니다.
#include "file"
디렉티브는 중요한 코멘트입니다.{$I "file"}
. - Perl에서는 키워드 "
use
모듈을 Import 하는 「」는, 다음과 같은 디렉티브 지정에도 사용할 수 있습니다.use strict;
또는use utf8;
. - Haskell 플러그마는 다음과 같은 특수한 주석 구문을 사용하여 지정합니다.
{-# INLINE foo #-}
를 클릭합니다.[2] - Python에는 두 가지 지침이 있습니다.
from __future__ import feature
(PEP 236에서 정의 - __future__로 돌아가기) 언어 기능을 변경합니다(Perl과 같이 기존 모듈 Import 구문을 사용합니다).coding
소스 코드 파일의 인코딩을 지정하는 디렉티브(코멘트 내)를 지정합니다(PE 263 - Python 소스 코드 인코딩 정의).보다 일반적인 지시문은 PEP 244에서 제안되었지만 거부되었습니다.이것은 모두 2001년으로 거슬러 올라갑니다. - ECMAScript는 또한
use
pragma가 문자열 리터럴로 선언되는 차이(예:"use strict";
, 또는"use asm";
함수 호출이 아닌 )를 사용합니다. - Visual Basic에서 키워드 "
Option
"는 지시어에 사용됩니다.Option Explicit On Off
- 최초 사용 시 암묵적인 변수 선언을 허용하지 않을 경우, 사전에 명시적인 선언이 필요합니다.Option Compare Binary
문자열 비교는 정렬 순서는 문자의 내부 2진 표현-예에 바탕을 두고에-결과에 대한English/European 코드 페이진(ANSI1252년)의;<>E<>Z<><>b<>e<>z<>À<>Ê<>Ø<>à<>ê<>ø.고유 사업자, 선택 사례 블록(예),<>,<,>), VB런타임 라이브러리 문자열 기능(e.g에 영향을 주지.스트레이트)Option Compare Text
- 시스템 로케일에서 대소문자를 구분하지 않는 텍스트 정렬 순서에 따라 문자열 비교 - 예를 들어 영어/유럽 코드 페이지(ANSI 1252) (A=a) < (B=b) < (E=e) < (E=e) = ) (E) = ) (Z)본질 연산자(예: =, <>, >), Select Case 블록 및 VB 런타임 라이브러리 문자열 함수(예: InStr)에 영향을 줍니다.Option Strict On Off
- 거부 시:- typeless programming - 명시적 유형이 없는 선언은 묵시적으로 개체로 입력됩니다.
- 오브젝트로 스태틱하게 입력된 값에 대한 레이트바인딩(CLR, DLR 및 COM 오브젝트에 대한 동적 디스패치)
- 암묵적 압축 변환 - 모든 변환이 좁은 유형(예: Long에서 Integer, Object에서 String, Control에서 TextBox)으로 변환 연산자(예: CInt, DirectCast, CType)를 사용하여 코드에서 명시적이어야 합니다.
Option Infer On Off
- 켜면 컴파일러가 이니셜라이저에서 로컬 변수의 유형을 추론할 수 있습니다.
- Ruby에서 인터프리터 디렉티브는 플러그마라고 불리며 다음 명령어에 이어지는 최상위 코멘트에 의해 지정됩니다.
key: value
표기법예를들면,coding: UTF-8
는, 파일이 UTF-8 문자 부호화에 의해서 부호화되어 있는 것을 나타내고 있습니다. - C#에서는 컴파일러 디렉티브를 전처리 디렉티브라고 부릅니다.컴파일러 경고 및 디버거 체크섬을 [3][4]제어하기 위해 특별히 사용되는 #pragma 등 다양한 컴파일러 명령이 있습니다.
- SQLite DBMS에는 다른 [5]DBMS와 호환되지 않는 명령을 도입하는 데 사용되는 PRAGMA 디렉티브가 포함되어 있습니다.
어셈블리 언어
- 어셈블리 언어에서 의사 연산 또는 "의사 연산"이라고도 하는 디렉티브는 일반적으로 타깃 머신과 같은 정보를 지정하고 코드 섹션 간의 구분 마크, 매크로 호출, 예약된 메모리 영역 정의 등을 수행합니다.어셈블러는 pseudo-op과 같은 pseudo-op에 마침표를 붙이는 것과 같은 명령 니모닉을 구별하기 위해 특정 구문을 사용합니다.
.END
어셈블러가 코드 조립을 중지하도록 지시할 수 있습니다.
PL/SQL
「 」를 참조해 주세요.
- #pragma once: C 및 C++의 프리프로세서 디렉티브
각주
- ^ 스틸 1990, 9장: 선언, 페이지 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.