Что такое директива в программировании
Перейти к содержимому

Что такое директива в программировании

  • автор:

Что такое директива в программировании

Директива #define

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

Стоит упомянуть о некотором нежелательном эффекте, который может иметь место при использовании директивы #define. Например, если имя константы, заданное с помощью директивы #define включить в имя другой константы или переменной, то оно будет заменено на свое значение.

В общем случае рекомендуется использовать выражение const для определения констант вместо #define

Синтаксис для Arduino такой же как и для C:

Синтаксис:

#define constantName value

Внимание! Символ # перед словом define обязателен.

Пример

#define ledPin 3 // компилятор заменит любое упоминание ledPin на занчение 3 во время компиляции

Замечание по использованию

Обратите внимание, что точка с запятой не ставится, иначе компилятор выдаст критическую ошибку.

#define ledPin 3; // это ошибка, ; здесь не нужна

Точно так же знак равно после имени константы тоже вызовет критическую ошибку компилятора.

#define ledPin = 3 // это тоже ошибка, знак = не нужен

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

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

Связанные понятия

Зарезерви́рованное сло́во (или ключево́е сло́во) — в языках программирования слово, имеющее специальное значение. Идентификаторы с такими именами запрещены.

Объе́ктный мо́дуль (также — объектный файл, англ. object file) — файл с промежуточным представлением отдельного модуля программы, полученный в результате обработки исходного кода компилятором. Объектный файл содержит в себе особым образом подготовленный код (часто называемый двоичным или бинарным), который может быть объединён с другими объектными файлами при помощи редактора связей (компоновщика) для получения готового исполнимого модуля либо библиотеки.

Динамическая идентификация типа данных (англ. run-time type information, run-time type identification, RTTI) — механизм в некоторых языках программирования, который позволяет определить тип данных переменной или объекта во время выполнения программы.

Кома́нда — это указание компьютерной программе действовать как некий интерпретатор для решения задачи. В более общем случае, команда — это указание некоему интерфейсу командной строки, такому как shell.

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

Упоминания в литературе

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

Конечно, эта таблица не является директивой для выбора цветовой гаммы вашего баннера, но принять информацию к сведению не помешает.

С середины 1990-х годов активно решались вопросы нормативного регулирования применения электронной подписи. Так, в течение 10 лет, с 1995 по 2005 г., практически все страны мира приняли соответствующие законы – «Об электронном документе», «Об электронной подписи», «О цифровой подписи», «Об электронной цифровой подписи», «Об электронных сделках», «Об электронной коммерции» и т. д. [167, с. 131–132]. Особо следует выделить модельные акты, принятые международными организациями: Комиссией ООН по международному торговому праву (ЮНСИТРАЛ) (модельные законы «Об электронной торговле» 1996 г. и «Об электронных подписях» 2001 г.) и Европейским парламентом (Директива 1999/93/ЕС Европейского парламента и Совета от 13 декабря 1999 г. о порядке использования электронных подписей в Европейском сообществе), послужившие в дальнейшем в качестве типовых для разработки национальных законов [231, 233, 234]. Выделим также принятый уже на новом этапе Европейским парламентом и Советом нормативно-правовой акт (EU Regulation) № 910-2014 от 23 июля 2014 г. «Об электронной идентификации и услугах доверия для электронных транзакций на внутреннем рынке, и об отмене Директивы 199 9/93/ЕС» [232].

Связанные понятия (продолжение)

Кодогенерация — часть процесса компиляции, когда специальная часть компилятора, кодогенератор, конвертирует синтаксически корректную программу в последовательность инструкций, которые могут выполняться на машине. При этом могут применяться различные, в первую очередь машинно-зависимые оптимизации. Часто кодогенератор является общей частью для множества компиляторов. Каждый из них генерирует промежуточный код, который подаётся на вход кодогенератору.

Макрокоманда, макроопределение или мáкрос — программный алгоритм действий, записанный пользователем. Часто макросы применяют для выполнения рутинных действий. А также макрос — это символьное имя в шаблонах, заменяемое при обработке препроцессором на последовательность символов, например: фрагмент html-страницы в веб-шаблонах, или одно слово из словаря синонимов в синонимизаторах.

Конте́йнер в программировании — тип, позволяющий инкапсулировать в себе объекты других типов. Контейнеры, в отличие от коллекций, реализуют конкретную структуру данных.

Низкоуровневый язык программирования (язык программирования низкого уровня) — язык программирования, близкий к программированию непосредственно в машинных кодах используемого реального или виртуального (например, байт-код, Microsoft .NET) процессора. Для обозначения машинных команд обычно применяется мнемоническое обозначение. Это позволяет запоминать команды не в виде последовательности двоичных нулей и единиц, а в виде осмысленных сокращений слов человеческого языка (обычно английских).

В языках программирования объявле́ние (англ. declaration) включает в себя указание идентификатора, типа, а также других аспектов элементов языка, например, переменных и функций. Объявление используется, чтобы уведомить компилятор о существовании элемента; это весьма важно для многих языков (например, таких как Си), требующих объявления переменных перед их использованием.

Конста́нта в программировании — способ адресации данных, изменение которых рассматриваемой программой не предполагается или запрещается.

Интроспекция (англ. type introspection) в программировании — возможность запросить тип и структуру объекта во время выполнения программы. Особое значение имеет в языке Objective C, однако имеется почти во всех языках, позволяющих манипулировать типами объектов как объектами первого класса; среди языков, поддерживающих интроспекцию — C++ (с RTTI), Go, Java, JavaScript, Perl, Ruby, Smalltalk; в PHP и Python интроспекция интегрирована в сам язык. Интроспекция может использоваться для реализации ad-hoc-полиморфизма.

Среда выполнения (англ. execution environment, иногда «ранта́йм» от англ. runtime — «время выполнения») в информатике — вычислительное окружение, необходимое для выполнения компьютерной программы и доступное во время выполнения компьютерной программы. В среде выполнения, как правило, невозможно изменение исходного текста программы, но может наличествовать доступ к переменным окружения операционной системы, таблицам объектов и модулей разделяемых библиотек.

Интерпретируемый язык программирования — язык программирования, исходный код на котором выполняется методом интерпретации. Классифицируя языки программирования по способу исполнения, к группе интерпретируемых относят языки, в которых операторы программы друг за другом отдельно транслируются и сразу выполняются (интерпретируются) с помощью специальной программы-интерпретатора (что противопоставляется компилируемым языкам, в которых все операторы программы заранее оттранслированы в объектный код.

Стандартная библиотека языка программирования — набор модулей, классов, объектов, констант, глобальных переменных, шаблонов, макросов, функций и процедур, доступных для вызова из любой программы, написанной на этом языке и присутствующих во всех реализациях языка.

Анонимная функция в программировании — особый вид функций, которые объявляются в месте использования и не получают уникального идентификатора для доступа к ним. Поддерживаются во многих языках программирования.

Блок (также говорят блок кода, блок команд, блок инструкций) в программировании — это логически сгруппированный набор идущих подряд инструкций в исходном коде программы, является основой парадигмы структурного программирования.

Реентерабельность тесно связана с безопасностью функции в многопоточной среде (thread-safety), тем не менее, это разные понятия. Обеспечение реентерабельности является ключевым моментом при программировании многозадачных систем, в частности, операционных систем.

Компилируемый язык программирования — язык программирования, исходный код которого преобразуется компилятором в машинный код и записывается в файл с особым заголовком и/или расширением для последующей идентификации этого файла, как исполняемого операционной системой (в отличие от интерпретируемых языков программирования, чьи программы выполняются программой-интерпретатором).

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

Ме́тод в объектно-ориентированном программировании — это функция или процедура, принадлежащая какому-то классу или объекту.

Раскрутка компилятора (англ. bootstrapping — от boot и strap) — метод создания транслятора для некоторого языка программирования, при котором транслятор пишется на том же языке программирования, для трансляции которого создаётся; создание транслятором исполняемых файлов из исходного кода самого транслятора. Используется для переноса трансляторов на новые платформы. Появился в середине 1950-х годов. Позволяет создать транслятор, который генерирует сам себя. Применялся для создания трансляторов многих.

Переменная среды́ (англ. environment variable) — текстовая переменная операционной системы, хранящая какую-либо информацию — например, данные о настройках системы.

Дестру́ктор — специальный метод класса, служащий для деинициализации объекта (например освобождения памяти).

Шебанг (англ. shebang, sha-bang, hashbang, pound-bang, or hash-pling) — в программировании последовательность из двух символов: решётки и восклицательного знака («#!») в начале файла скрипта.

Идиома программирования — устойчивый способ выражения некоторой составной конструкции в одном или нескольких языках программирования. Идиома является шаблоном решения задачи, записи алгоритма или структуры данных путём комбинирования встроенных элементов языка.

Механизм копирования при записи (англ. Copy-On-Write, COW) используется для оптимизации многих процессов, происходящих в операционной системе, таких как, например, работа с оперативной памятью или файлами на диске (пример — ext3cow).

Станда́рт оформле́ния ко́да (станда́рт коди́рования, стиль программи́рования) (англ. coding standards, coding convention или programming style) — набор правил и соглашений, используемых при написании исходного кода на некотором языке программирования. Наличие общего стиля программирования облегчает понимание и поддержание исходного кода, написанного более чем одним программистом, а также упрощает взаимодействие нескольких человек при разработке программного обеспечения.

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

Побо́чные эффе́кты (англ. side effects) — любые действия работающей программы, изменяющие среду выполнения (англ. execution environment). Например, к побочным эффектам относятся.

Из-за путаницы с терминологией словом «оператор» в программировании нередко обозначают операцию (англ. operator), см. Операция (программирование).Инстру́кция или опера́тор (англ. statement) — наименьшая автономная часть языка программирования; команда или набор команд. Программа обычно представляет собой последовательность инструкций.

Мо́дульное программи́рование — это организация программы как совокупности небольших независимых блоков, называемых модулями, структура и поведение которых подчиняются определённым правилам. Использование модульного программирования позволяет упростить тестирование программы и обнаружение ошибок. Аппаратно-зависимые подзадачи могут быть строго отделены от других подзадач, что улучшает мобильность создаваемых программ.

А́дресное пространство (англ. address space) — совокупность всех допустимых адресов каких-либо объектов вычислительной системы — ячеек памяти, секторов диска, узлов сети и т. п., которые могут быть использованы для доступа к этим объектам при определенном режиме работы (состоянии системы).

Сопрограммы (англ. coroutines) — методика связи программных модулей друг с другом по принципу кооперативной многозадачности: модуль приостанавливается в определённой точке, сохраняя полное состояние (включая стек вызовов и счётчик команд), и передаёт управление другому. Тот, в свою очередь, выполняет задачу и передаёт управление обратно, сохраняя свои стек и счётчик.

Соглашение о вызове (англ. calling convention) — описание технических особенностей вызова подпрограмм, определяющее.

Путь (англ. path) — набор символов, показывающий расположение файла или каталога в файловой системе.

Разделяемая память (англ. Shared memory) является самым быстрым средством обмена данными между процессами.

По́ле кла́сса или атрибу́т (переменная-член, data member, class field, instance variable) в объектно-ориентированном программировании — переменная, связанная с классом или объектом. Все данные объекта хранятся в его полях. Доступ к полям осуществляется по их имени. Обычно тип данных каждого поля задаётся в описании класса, членом которого является поле.

Кросс-компиля́тор (англ. cross compiler) — компилятор, производящий исполняемый код для платформы, отличной от той, на которой исполняется сам кросс-компилятор. Такой инструмент бывает полезен, когда нужно получить код для платформы, экземпляров которой нет в наличии, или в случаях когда компиляция на целевой платформе невозможна или нецелесообразна (например, это касается мобильных систем или микроконтроллеров с минимальным объёмом памяти).

Дизассе́мблер (от англ. disassembler ) — транслятор, преобразующий машинный код, объектный файл или библиотечные модули в текст программы на языке ассемблера.

В программировании сборка мусора (англ. garbage collection) — одна из форм автоматического управления памятью. Специальный процесс, называемый сборщиком мусора (англ. garbage collector), периодически освобождает память, удаляя объекты, которые уже не будут востребованы приложениями.

Ошибка сегментации (англ. Segmentation fault, сокр. segfault, жарг. сегфолт) — ошибка программного обеспечения, возникающая при попытке обращения к недоступным для записи участкам памяти либо при попытке изменить память запрещённым способом. В системах на основе процессоров Motorola 68000 эти ошибки, как правило, известны как ошибки адреса или шины.

Язы́к запро́сов — это искусственный язык, на котором делаются запросы к базам данных и другим информационным системам, особенно к информационно-поисковым системам.

Переключение контекста (англ. context switch) — в многозадачных ОС и средах — процесс прекращения выполнения процессором одной задачи (процесса, потока, нити) с сохранением всей необходимой информации и состояния, необходимых для последующего продолжения с прерванного места, и восстановления и загрузки состояния задачи, к выполнению которой переходит процессор.

Примитивный (встроенный, базовый) тип — тип данных, предоставляемый языком программирования как базовая встроенная единица языка.

При́месь (англ. mix in) — элемент языка программирования (обычно класс или модуль), реализующий какое-либо чётко выделенное поведение. Используется для уточнения поведения других классов, не предназначен для порождения самостоятельно используемых объектов.

Библиотека стандартных шаблонов (STL) (англ. Standard Template Library) — набор согласованных обобщённых алгоритмов, контейнеров, средств доступа к их содержимому и различных вспомогательных функций в C++.

Динамическое распределение памяти — способ выделения оперативной памяти компьютера для объектов в программе, при котором выделение памяти под объект осуществляется во время выполнения программы.

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

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

Директива программирование У этого термина существуют и другие значения см Директива значения В статье не хватает ссылок

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

Язык ассемблера править

В языке ассемблера директивы указывают общую информацию, такую как целевая среда, указание границ между секциями и так далее. Например, директива «ALIGN», которая вставляет в текущую секцию необходимое количество байт для выравнивания строк, часто упоминаемая как «директива», противоречит тому факту, что она совпадает с частями конструкций в генерируемом коде.

Препроцессор Си править

Основная статья: Препроцессор Си

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

В других языках высокого уровня править

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

В языке Ада директивы компилятора называются прагмами (сокращение от «pragmatic information» («полезная информация»)).

В Паскале директивы называются указательными комментариями из-за того, что по синтаксису похожи на комментарии. В Паскале указательный комментарий — это комментарий, у которого первым символом указан знак доллара; например, аналогом директивы #include «file» языка Си будет указательный комментарий .

В Perl ключевое слово « use » («применять») можно использовать как «прагму», например use strict; или use utf8; . Такая конструкция иногда может упоминаться как «директива». Тем не менее, в некоторых источниках используется термин «директивы Perl» для обозначения конструкций типа Шебанг.

В языке Haskell есть собственный набор прагм. Они позволяют включать расширения языка, передавать параметры компиляции, также есть специальные прагмы. Например , указывают компилятору что нужно/не нужно встраивать функцию (аналог ключевого слова inline в Си). позволяет хранить данные без служебной информации (эффективность по памяти в ущерб гибкости использования). используется для переопределения специальных представителей класса типов в исключительных ситуациях. Есть также расширения HPP — собственный препроцессор Haskell и CPP (C PreProcessor) — вызов препроцессора Си.

См. также править

  • Препроцессор
  • Заголовочный файл
  • Pragma once
  • Include guard

Примечания править

Ссылки править

  • пример использования директив в языке Ассемблера от 20 декабря 2016 на Wayback Machine
  • описание использования директив в языке C— от 19 сентября 2007 на Wayback Machine

Википедия, чтение, книга, библиотека, поиск, нажмите, истории, книги, статьи, wikipedia, учить, информация, история, скачать, скачать бесплатно, mp3, видео, mp4, 3gp, jpg, jpeg, gif, png, картинка, музыка, песня, фильм, игра, игры

Дата публикации: Октябрь 29, 2023, 23:38 pm
Самые читаемые

Второй Всероссийский съезд советов

Второе сражение при Петерсберге

Второе правительство Фрадкова

Вторжение (фильм, 2006)

Вторжение Марвана ибн Мухаммада в Грузию

Вторая Тверская-Ямская улица

Вторая Карачаровская улица

Вторая Бундеслига 1996/1997

Вторая лига Чехии по футболу 2011/2012

Вторая лига Португалии по футболу 2002/2003

© Copyright 2021, Все права защищены.

U etogo termina sushestvuyut i drugie znacheniya sm Direktiva znacheniya V state ne hvataet ssylok na istochniki sm rekomendacii po poisku Informaciya dolzhna byt proveryaema inache ona mozhet byt udalena Vy mozhete otredaktirovat statyu dobaviv ssylki na avtoritetnye istochniki v vide snosok 10 dekabrya 2022 Proverit informaciyu Neobhodimo proverit tochnost faktov i dostovernost svedenij izlozhennyh v etoj state Na stranice obsuzhdeniya dolzhny byt poyasneniya 10 dekabrya 2022 V programmirovanii termin direktiva ukazanie po ispolzovaniyu pohozh na termin komanda takzhe ispolzuetsya dlya opisaniya nekotoryh konstrukcij yazyka programmirovaniya to est ukazanij kompilyatoru ili assembleru osobennostej obrabotki pri kompilyacii Soderzhanie 1 Yazyk assemblera 2 Preprocessor Si 3 V drugih yazykah vysokogo urovnya 4 Sm takzhe 5 Primechaniya 6 SsylkiYazyk assemblera pravitV yazyke assemblera direktivy ukazyvayut obshuyu informaciyu takuyu kak celevaya sreda ukazanie granic mezhdu sekciyami i tak dalee Naprimer direktiva ALIGN kotoraya vstavlyaet v tekushuyu sekciyu neobhodimoe kolichestvo bajt dlya vyravnivaniya strok chasto upominaemaya kak direktiva protivorechit tomu faktu chto ona sovpadaet s chastyami konstrukcij v generiruemom kode Preprocessor Si pravitOsnovnaya statya Preprocessor Si V yazyki programmirovaniya C i C vstroena podderzhka preprocessora Stroki v ishodnom kode kotorye dolzhny byt obrabotany preprocessorom v vide define i include nazyvayutsya preprocessornymi direktivami V drugih yazykah vysokogo urovnya pravitSintaksicheskie konstrukcii pohozhie na preprocessornye direktivy yazyka Si takie kak region v yazyke C takzhe chasto nazyvayutsya direktivami hotya v ukazannyh sluchayah stadii obrabotki preprocessorom mozhet i ne byt V yazyke Ada direktivy kompilyatora nazyvayutsya pragmami sokrashenie ot pragmatic information poleznaya informaciya V Paskale direktivy nazyvayutsya ukazatelnymi kommentariyami iz za togo chto po sintaksisu pohozhi na kommentarii V Paskale ukazatelnyj kommentarij eto kommentarij u kotorogo pervym simvolom ukazan znak dollara naprimer analogom direktivy include file yazyka Si budet ukazatelnyj kommentarij I file V Perl klyuchevoe slovo use primenyat mozhno ispolzovat kak pragmu naprimer use strict ili use utf8 Takaya konstrukciya inogda mozhet upominatsya kak direktiva Tem ne menee v nekotoryh istochnikah 1 ispolzuetsya termin direktivy Perl dlya oboznacheniya konstrukcij tipa Shebang V yazyke Haskell est sobstvennyj nabor pragm Oni pozvolyayut vklyuchat rasshireniya yazyka peredavat parametry kompilyacii takzhe est specialnye pragmy Naprimer INLINE NOINLINE ukazyvayut kompilyatoru chto nuzhno ne nuzhno vstraivat funkciyu analog klyuchevogo slova inline v Si UNBOXED pozvolyaet hranit dannye bez sluzhebnoj informacii effektivnost po pamyati v usherb gibkosti ispolzovaniya SPECIALIZE ispolzuetsya dlya pereopredeleniya specialnyh predstavitelej klassa tipov v isklyuchitelnyh situaciyah Est takzhe rasshireniya HPP sobstvennyj preprocessor Haskell i CPP C PreProcessor vyzov preprocessora Si Sm takzhe pravitPreprocessor Zagolovochnyj fajl Pragma once Include guardPrimechaniya pravit What is the path to Perl Ssylki pravitprimer ispolzovaniya direktiv v yazyke Assemblera Arhivnaya kopiya ot 20 dekabrya 2016 na Wayback Machine opisanie ispolzovaniya direktiv v yazyke Fortran opisanie ispolzovaniya direktiv v yazyke C Arhivnaya kopiya ot 19 sentyabrya 2007 na Wayback Machine Istochnik https ru wikipedia org w index php title Direktiva programmirovanie amp oldid 128842755

Директивы препроцессора в Си

Препроцессор — это специальная программа, являющаяся частью компилятора языка Си. Она предназначена для предварительной обработки текста программы. Препроцессор позволяет включать в текст программы файлы и вводить макроопределения.

Работа препроцессора осуществляется с помощью специальных директив (указаний). Они отмечаются знаком решетка #. По окончании строк, обозначающих директивы в языке Си, точку с запятой можно не ставить.

Основные директивы препроцессора

  • #include — вставляет текст из указанного файла
  • #define — задаёт макроопределение (макрос) или символическую константу
  • #undef — отменяет предыдущее определение
  • #if — осуществляет условную компиляцию при истинности константного выражения
  • #ifdef — осуществляет условную компиляцию при определённости символической константы
  • #ifndef — осуществляет условную компиляцию при неопределённости символической константы
  • #else — ветка условной компиляции при ложности выражения
  • #elif — ветка условной компиляции, образуемая слиянием else и if
  • #endif — конец ветки условной компиляции
  • #line — препроцессор изменяет номер текущей строки и имя компилируемого файла
  • #error — выдача диагностического сообщения
  • #pragma — действие, зависящее от конкретной реализации компилятора.

Директива #include

Директива #include позволяет включать в текст программы указанный файл.

Если заголовочный файл содержит описание библиотечных функций и находится в папке компилятора, он заключается в угловые скобки <> .

Если файл находится в текущем каталоге проекта, он указывается в кавычках «» . Для файла, находящегося в другом каталоге необходимо в кавычках указать полный путь.

#include
#include «func.h»

Директива #define

Директива #define позволяет вводить в текст программы константы и макроопределения.

Общая форма записи

#define Идентификатор Замена

Поля Идентификатор и Замена разделяются одним или несколькими пробелами.

Директива #define указывает компилятору, что нужно подставить строку, определенную аргументом Замена, вместо каждого аргумента Идентификатор в исходном файле.

Идентификатор не заменяется, если он находится в комментарии, в строке или как часть более длинного идентификатора.

#include
#define A 3
int main()
printf( «%d + %d = %d» , A, A, A+A); // 3 + 3 = 6
getchar();
return 0;
>

В зависимости от значения константы компилятор присваивает ей тот или иной тип. С помощью суффиксов можно переопределить тип константы:

  • U или u представляет целую константу в беззнаковой форме ( unsigned );
  • F (или f ) позволяет описать вещественную константу типа float ;
  • L (или l ) позволяет выделить целой константе 8 байт ( long int );
  • L (или l ) позволяет описать вещественную константу типа long double

#define A 280U // unsigned int
#define B 280LU // unsigned long int
#define C 280 // int (long int)
#define D 280L // long int
#define K 28.0 // double
#define L 28.0F // float
#define M 28.0L // long double

Вторая форма синтаксиса определяет макрос, подобный функции, с параметрами. Эта форма допускает использование необязательного списка параметров, которые должны находиться в скобках. После определения макроса каждое последующее вхождение

идентификатор(аргумент1, …, агрументn)

замещается версией аргумента замена, в которой вместо формальных аргументов подставлены фактические аргументы.

Пример на Си : Вычисление синуса угла

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#define PI 3.14159265
#define SIN(x) sin(PI*x/180)
int main()
int c;
system( «chcp 1251» );
system( «cls» );
printf( «Введите угол в градусах: » );
scanf( «%d» , &c);
printf( «sin(%d)=%lf» , c, SIN(c));
getchar(); getchar();
return 0;
>

Использование #define

Отличием таких макроопределений от функций в языке Си является то, что на этапе компиляции каждое вхождение идентификатора замещается соответствующим кодом.

Таким образом, программа может иметь несколько копий одного и того же кода, соответствующего идентификатору. В случае работы с функциями программа будет содержать 1 экземпляр кода, реализующий указанную функцию, и каждый раз при обращении к функции ей будет передано управление.

Отменить макроопределение можно с помощью директивы #undef .

Однако при использовании таких макроопределений следует соблюдать осторожность, например

1
2
3
4
5
6
7
8
9
10
11
12
13

#include
#define sum(A,B) A+B
int main()
int a, b, c, d;
a = 3; b = 5;
c = (a + b) * 2; // c = (a + b)*2
d = sum(a, b) * 2; // d = a + b*2;
printf( » a = %d\n b = %d\n» , a, b);
printf( » c = %d \n d = %d \n» , c, d);
getchar();
return 0;
>

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *