Препроцессор языка Си - часть 2
Результат работы препроцессора помещается в поток стандартного вывода stdout. Обработка программы препроцессором без компиляции позволяет программисту проанализировать действие определений препроцессора и макровызовов.
! | Символическую константу после #define лучше писать прописными буквами. В процессе использования языка Си выработалась традиция писать константы большими буквами. Если при просмотре программы встречается имя, написанное прописными буквами, сразу становится ясно, что это константа, а не переменная. Давайте не нарушать традицию! |
Директиву #define можно использовать для определения символьных и строковых констант. В первом случае необходимо использовать "апостроф", а во втором кавычки.
Например,
#define NULL '\0' #define USA '$' #define RUSSIA "Рубль" #undef USA
Команда #undef USA отменяет предыдущее определение для идентификатора USA. Через команду #define можно задавать выражения - макросы, которые вычисляются и при компиляции подставляются в программу. Во избежании ошибок при вычислении выражений макроопределения необходимо заключать в скобки:
#define идентификатор1 (идентификатор2,_) строка
Пример:
#define abs(A) (((A)>0) ? (A): - (A))
Каждое вхождение выражения abs(arg) в тексте программы заменяется на ((arg)>0) ? (arg): -(arg)), причем параметр макроопределения A заменяется на arg.
Пpимер:
#define nmem(P,N)\ (P)->p_mem[N].u_long
Символ \ продолжает макроопределение на вторую строку. Это макроопределение уменьшает сложность выражения, описывающего массив объединений внутри структуры.
Макроопределения препроцессора языка Си имеют две формы - простую и параметризованную,
#define идентификатор строка_замены #define идентификатор(x1,x2,_,xn) строка_замены
где строка_замены может содержать идентификаторы, ключевые слова, разделители, такие как круглая или прямоугольная скобка, или строки знаков, не содержащие каких-либо разделителей.
Замечание. Командная строка #include может встречаться в любом месте программы, но обычно все включения размещаются в начале исходного текста:
#include <имя_файла>