Введение в директивы препроцессора в C
Чаще всего ошибочно считают, что препроцессоры или макросы являются частью компиляции программы, но это совершенно неверно. Директивы препроцессора являются типом макросов и фазой перед компиляцией. Можно сказать, что это некоторый набор инструкций, данных компилятору для выполнения фактической компиляции. Они также известны как более длинные конструктивные сокращения для макросов, что означает, что значение в макросах заменяется сегментом кодов. Макрос определяется специальным символом и имеет символ, начинающийся с «#». Поэтому эти # define являются своего рода специальным препроцессором, за которым следует фактический компилятор. В этой теме мы узнаем о директивах препроцессора в C.
Препроцессор имеет специальный тип представления для своей идентификации, как любая директива препроцессора инициирует себя специальным символом «#», за которым следует идентификатор, а затем имя директивы. Пробелы также разрешены до и после #. Например, # include.
Существуют определенные варианты или возможности, которые может обеспечить препроцессор C:
- Заголовочные файлы. Включение заголовочных файлов - это способ, которым объявления могут быть заменены синтаксисом и телом программы.
- Расширение макроса. Определение макросов похоже на сокращение фрагмента кода, который препроцессор C заменяет макрокомандами с их соответствующим определением.
- Компиляция по условиям: согласно различным сценариям или различным условиям включение определенных частей программы возможно путем условной компиляции.
- Линейное управление: если вы используете программу для объединения или перестановки кого-либо или нескольких исходных файлов в промежуточный файл для компиляции, вы можете использовать линейный контроль для информирования компилятора о том, откуда каждая исходная строка происходит.
Типы препроцессорных директив
Все типы директив препроцессора следующие:
- # определить
- # включают
- # ifdef
- # undef
- #ifndef
- # если
- #else
- #elif
- #endif
- #ошибка
- #pragma
1. #define (Макросы)
Макрос - это фрагмент кода, который заменяется некоторым значением кода макроса. Любой макрос в основном описывается и определяется его директивой #define.
Синтаксис:
#define token value
Существует два типа макросов:
- Функциональные макросы
- Объект - как макросы
Функциональные макросы
Функция like-macro работает почти как вызов функции.
Например:
#define MAX(a, b) ((a)>(b) ? (a): (b))
Макс здесь имя макроса.
Пример:
Выход:
Объект - как макросы
Объектоподобные макросы - это тип идентификатора, заменяемый значением. Он в основном используется для представления числовых констант.
#define PI 3.1415
Здесь значение PI будет заменено макросом.
Выход:
2. #include
Существует некоторая другая функциональность для директивы include препроцессора. Он имеет три собственных варианта, которые заменяют код на текущий код исходного файла.
Три варианта заключаются в следующем:
- #включают
- #include»файл»
- Включите что-нибудь еще
#включают
Выполняет поиск файла в определенном списке системы или каталогов, как указано, затем ищет стандартный список системных библиотек.
#include»файл»
Этот тип используется для ваших собственных настраиваемых заголовочных файлов программы. Сначала выполняется поиск файла с именем file в текущем каталоге, за которым следуют файлы системных заголовков и текущие каталоги текущего файла каталога.
# включить что-нибудь
Этот тип директивы препроцессора include используется, когда ни один из двух оставшихся двух типов директивы и ее аргументов не соответствуют и не удовлетворяют структуре вычислений.
3. #Ifdef
Проверяет, определен ли макрос с помощью # define или нет. Если да, он выполнит код, иначе не будет.
Синтаксис:
#ifdef MACRO
(
Code body
)
#endif
#undef:
Отмена определения макроса означает, что он не определен и ему предшествует директива #undef.
Синтаксис:
#undef token
Выход:
4. Ифндеф
Этот процессор проверяет, определен ли #define или нет #define. Если да, он выполняет код.
Синтаксис:
#Ifndef MACRO
//code
#endif
#If
Этот процессор работает только как цикл if, он оценивает выражение или условие. Если условие id истинно, он будет выполнять код, иначе нет.
Синтаксис:
#if expression
//code
#endif
#else
Директива препроцессора #else используется для оценки выражения или условия, если условие #if ложно. Его можно использовать с директивами #if, #elif, #ifdef и #ifndef.
Синтаксис:
#if expression
//if body
#else
//else body
#endif
Пример:
Выход:
5. # Ошибка
Как следует из названия, директива препроцессора Error используется для указания ошибки, а затем компилятор выдает фатальную ошибку, если директива error найдена, и пропускает следующие шаги компиляции.
Выход:
6. #pragma
Это зависит от компилятора, поскольку разные ОС и разные машины предоставляют все типы функций операционной системы, которые используются компилятором для предоставления компилятору дополнительной информации.
Синтаксис:
#pragma token
Пример:
Выход:
Каждый препроцессор имеет свое значение, например, условная директива используется для проверки того, следует ли учитывать часть программы на основе сценариев или нет.
Предположим, что программа хочет быть скомпилированной в указанной среде с определенной конфигурацией операционной системы, но как только она переходит на эту фазу компиляции, она выдает ошибку или может дать неверный код, просто давая своей программе возможность большого отказа. связать программу и запустить ее во время выполнения. Также может существовать другая возможность, когда один и тот же исходный файл с двумя разными программами может выполнить длительную проверку согласованности или непосредственных данных или распечатать значения данных с отладкой.
Кроме того, эти сценарии, создаваемые с помощью вычислений, также можно использовать для запуска на одном компьютере с использованием директив предварительной обработки.
Вывод
Выходные данные препроцессора C очень похожи на входные данные, за исключением того, что все директивы предварительной обработки были заменены пустыми строками или пробелами. Разные файлы и форматы имеют разные синтаксисы, говорящие о том, что был создан новый файл, или указывающие на возврат к файлу, или обработку следует выполнить перед компиляцией.
Все сценарии используются для того, чтобы рассказать другим о возможностях препроцессора C и о том, как он развивается с различными версиями компилятора, запущенными со стандартами GCC и ANSI.
Рекомендуемые статьи
Это руководство по директивам препроцессора в C. Здесь мы обсуждаем типы директив препроцессора с синтаксисом и примерами. Вы также можете взглянуть на следующие статьи, чтобы узнать больше
- Обратный номер в C
- Сортировка в C
- Функция хеширования в C
- Продолжить заявление в C
- Сортировка в C #
- Как работает функция хеширования в php?