===== Препроцессор ===== Директивы препроцессора: * 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|Фенстер]]