===== Препроцессор =====
Директивы препроцессора:
* define — задаёт макроопределение (макрос) или символическую константу
* undef — отменяет предыдущее определение
* include — вставляет текст из указанного файла
* if — осуществляет условную компиляцию при истинности константного выражения
* ifdef — осуществляет условную компиляцию при определённости символической константы
* ifndef — осуществляет условную компиляцию при неопределённости символической константы
* else — ветка условной компиляции при ложности выражения
* elif — ветка условной компиляции, образуемая слиянием else и if
* endif — конец ветки условной компиляции
* line — препроцессор изменяет номер текущей строки и имя компилируемого файла
* error — выдача диагностического сообщения
* pragma — действие, зависящее от конкретной реализации компилятора
==== Макросы ====
#define max(a,b) ((a) > (b) ? (a) : (b))
=== Операторы # и ## ===
#define make_str(bar) # bar
printf(make_str(42));
преобразуется в
printf("42");
#define MakePosition(x) x##X,x##Y,x##Width,x##Height
int MakePosition(Object);
преобразуется в
int ObjectX,ObjectY,ObjectWidth,ObjectHeight;
=== undef ===
После строки
#undef идентификатор
препроцессор считает, что //идентификатор// не определён. Это может помочь нам в случае условной компиляции.
==== Ссылки ====
* [[http://gcc.gnu.org/onlinedocs/cpp/|CPP (the C preprocessor from gcc project]]
* [[http://info.fenster.name/clectures/lecture08.pdf|Фенстер]]